Apa yang salah dengan perintah di bawah ini
awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'
Keluaran:
awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk: ^ syntax error
Seperti banyak bahasa pemrograman lainnya, awk
membedakan antara ekspresi dan pernyataan. Secara umum, pernyataan adalah tindakan yang dilakukan, sedangkan ekspresi adalah perhitungan yang menghasilkan nilai.
Operator ternary di awk
, seperti mitranya dalam C dari mana asalnya, itu sendiri merupakan ekspresi (bukan pernyataan) yang mengharapkan tiga ekspresi lainnya sebagai expr1 ? expr2 : expr3
. print
adalah sebuah pernyataan. Itu tidak dapat digunakan di mana ekspresi dipanggil, karenanya kesalahan sintaksis.
Sudahkah Anda mencoba awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'
?
Menggunakan pernyataan di mana ekspresi dipanggil untuk tidak masuk akal. Pernyataan tidak mengembalikan nilai. Jadi ketika Anda memilikinya condition ? stmt1 : stmt2
, berapa nilai yang dihitung oleh operator ternary? Jika condition
salah, itu harus nilai stmt2
tetapi itu bukan nilai, itu tindakan.
x = if true; print "yes"; else; print "no"; end
(cond1) ? printf("str1") : printf("str2")
? Terima kasih menjelaskan seluk beluk terner. EDIT: pada kenyataannya, menggunakan konstruksi jelek berikut:str = (cond1) ? sprintf("str1") : sprintf("str2"); printf("%s", str)
berfungsi, tetapi pada titik ini hampir sekompak dan jauh lebih jelas untuk digunakan jika / selain itu :)