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
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
Jawaban:
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 :)