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, awkmembedakan 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. printadalah 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 conditionsalah, itu harus nilai stmt2tetapi 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 :)