回答:
他の多くのプログラミング言語と同様に、awk
は式とステートメントを区別します。概して、ステートメントは実行されるアクションであり、式は値をもたらす計算です。
の三項演算子はawk
、Cのそれと同じように、それ自体が式(ステートメントではない)であり、他の3つの式をとして期待しexpr1 ? expr2 : expr3
ます。print
ステートメントです。式が要求される場所では使用できないため、構文エラーになります。
試しましたawk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'
か?
式が呼び出されるステートメントを使用しても意味がありません。ステートメントは値を返しません。では、condition ? stmt1 : stmt2
がある場合、三項演算子によって計算される値は何ですか?condition
がfalseの場合、それはの値である必要がありますがstmt2
、それは値ではなく、アクションです。
x = if true; print "yes"; else; print "no"; end
(cond1) ? printf("str1") : printf("str2")
ますか?三元の微妙さを説明してくれてありがとう。編集:実際には、次の醜い構造を使用:str = (cond1) ? sprintf("str1") : sprintf("str2"); printf("%s", str)
動作しますが、現時点では、if / elseを使用するのとほぼ同じくらいコンパクトではるかに明確です:)