Bash 演算でコンマ演算子はどのような役割を果たしますか?

Bash 演算でコンマ演算子はどのような役割を果たしますか?

Bash マニュアル、セクション 6.5 シェル算術

expr1 , expr2
comma

コンマ演算子は何をしますか?

expr1expr2sumは算術式ですか?

答え1

,リスト演算子です。

算術式のリストは左から右に評価され、最後の式の結果が戻り値になります。

$ echo "$(( a=1, ++a, ++a ))"
3

bash-2.04-develにリスト,演算子が追加されました(事前/事後増加/減少演算子とともに)。

読みたいかもしれませんexpr.c他の演算子の実装方法とその機能を確認してください。expcomma(),オペレーターのため。

答え2

吹く

コンマ演算子はLESS=+/'expr1 , expr2' man bashbash()で動作します。

expr1, expr2
カンマ

その目的については他の説明はありません。
これを行うには、私たちは読む必要があります「C言語」(すべての算術演算子の誕生地)の説明

はい(上記のリンクに示されています)(2番目の値は5です):

$ echo "$(( (t=3, t+2) )) $t"
5 3

またはより簡単に:

$ echo "$(( t=3, t+2 )) $t"
5 3

はい、各要素をカンマで区切ります。表現かもしれません:

1313    expression:
            assignment-expression
            expression , assignment-expression

POSIX

実際にPOSIXいいえコンマ演算子を含みます。
表:選択されたISO C標準演算子と制御フローキーワード

または、次のことを試してください。

$  dash -c 'echo $(( t=3,t+2 ))'
dash: 1: arithmetic expression: expecting EOF: " t=3,t+2 "
$  bash -c 'echo $(( t=3,t+2 ))'
5

IBMがレポートで確認したように、AIXおよびPOSIXシェルページ(強調):

すべての積分演算子、外の...とカンマ(、)がサポートされています。

ただし、AIX でも IBM はコンマ演算子をサポートすると主張しています。ksh93シェルから/usr/bin/ksh93

単項 +, ++, -- および ?: 構文 (例: "x ? y:z") や (カンマ) 演算子など、より多くの算術演算子を使用できます。

結論として:

dash, ksh   do not have a comma operator.
ksh93          may have a comma operator.
bash, zsh   do     have a comma operator.

関連情報