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.