三項演算子と印刷

三項演算子と印刷

次のコマンドの問題

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 : expr3print文だ。式が必要な場所では使用できないため、構文エラーが発生します。

試してみましたawk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'か?

式が必要な文を使用することは意味がありません。文は値を返しません。それでは、三項演算子があるときにcondition ? stmt1 : stmt2計算する値は何ですか? false の場合conditionは の値でなければなりません。stmt2これは値ではなく演算です。

関連情報