次のコマンドの問題
awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'
出力:
awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk: ^ syntax error
答え1
他の多くのプログラミング言語と同様に、awk
式と文も区別されます。要約すると、ステートメントは実行されるアクションですが、式は値を生成する計算です。
の三項演算子は、awk
派生したC言語の対応する演算子と同様に、それ自体が他の3つの式になると予想する式(文ではない)ですexpr1 ? expr2 : expr3
。print
文だ。式が必要な場所では使用できないため、構文エラーが発生します。
試してみましたawk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'
か?
式が必要な文を使用することは意味がありません。文は値を返しません。それでは、三項演算子があるときにcondition ? stmt1 : stmt2
計算する値は何ですか? false の場合condition
は の値でなければなりません。stmt2
これは値ではなく演算です。