Operador ternário e imprimir

7

O que há de errado com o comando abaixo

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

Saída:

awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk:                           ^ syntax error
    
por Mohammad Adil 09.04.2016 / 14:18

1 resposta

20

Como muitas outras linguagens de programação, awk faz distinção entre expressões e instruções. Em geral, as declarações são ações executadas, enquanto expressões são cálculos que resultam em um valor.

O operador ternário em awk , como sua contraparte em C de onde vem, é em si uma expressão (não uma declaração) que espera outras três expressões como expr1 ? expr2 : expr3 . print é uma declaração. Não pode ser usado onde uma expressão é chamada, daí o erro de sintaxe.

Você já tentou awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}' ?

O uso de uma instrução em que uma expressão é chamada não pode fazer sentido. Declarações não retornam valores. Então, quando você tem condition ? stmt1 : stmt2 , qual é o valor computado pelo operador ternário? Se condition for falso, deve ser o valor de stmt2 , mas isso não é um valor, é uma ação.

    
por 09.04.2016 / 14:38

Tags