Aşağıdaki komutla sorun nedir
awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'
Çıktı :
awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk: ^ syntax error
Aşağıdaki komutla sorun nedir
awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'
Çıktı :
awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk: ^ syntax error
Yanıtlar:
Diğer birçok programlama dili gibi, awkifadeler ve ifadeler arasında ayrım yapar. Genel olarak, ifadeler yürütülen eylemlerdir, ifadeler ise bir değer sağlayan hesaplamalardır.
İçindeki üçlü operatör awk, C'nin geldiği yerdeki karşılığı gibi, kendisi de diğer üç ifadeyi bekleyen bir ifadedir (bir ifade değil) expr1 ? expr2 : expr3. printbir ifadedir. Bir ifadenin çağrıldığı yerde kullanılamaz, dolayısıyla sözdizimi hatası.
Denedin awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'mi
İfadenin çağrıldığı bir deyimin kullanılması mantıklı değildir. İfadeler değer döndürmez. Peki sahip condition ? stmt1 : stmt2olduğunuzda üçlü operatör tarafından hesaplanan değer nedir? Eğer conditionyanlışsa, değeri olmalı stmt2ama bu bir değer değil, bir eylem.
x = if true; print "yes"; else; print "no"; end
(cond1) ? printf("str1") : printf("str2")? Üçlünün inceliklerini açıkladığınız için teşekkürler. EDIT: aslında, aşağıdaki çirkin inşaat kullanarak: str = (cond1) ? sprintf("str1") : sprintf("str2"); printf("%s", str)çalışır, ama bu noktada onun kadar kompakt ve kullanımı çok daha açık eğer / else :)