Opérateur ternaire et printing

Quel est le problème avec la command ci-dessous

awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}' 

Sortie:

 awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"} awk: ^ syntax error 

Comme beaucoup d'autres langages de programmation, awk distingue les expressions et les énoncés. En gros, les instructions sont des actions qui sont effectuées, tandis que les expressions sont des calculs qui donnent une valeur.

L'opérateur ternaire dans awk , comme son homologue dans C d'où il vient, est lui-même une expression (pas une déclaration) qui attend trois autres expressions comme expr1 ? expr2 : expr3 expr1 ? expr2 : expr3 . print est une déclaration. Il ne peut pas être utilisé lorsqu'une expression est appelée, d'où l'erreur de syntaxe.

Avez-vous essayé awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}' awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}' awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}' ?

Utiliser une déclaration où une expression est appelée ne peut avoir aucun sens. Les instructions ne renvoient pas de valeurs. Alors quand vous avez la condition ? stmt1 : stmt2 condition ? stmt1 : stmt2 , quelle est la valeur calculée par l'opérateur ternaire? Si la condition est fausse, elle devrait être la valeur de stmt2 mais ce n'est pas une valeur, c'est une action.