$( (((expression)) ) と $(((expression))) の違いは何ですか?

$( (((expression)) ) と $(((expression))) の違いは何ですか?

なぜ出力が違うのですか?

echo $( (( 5+5 )) )

echo $((( 5+5 )))
10

ベストアンサー1

bash有効な状態でコマンドを実行しますset -x

$ set -x
$ echo $( (( 5+5 )) )
++ ((  5+5  ))
+ echo

$ echo $((( 5+5 )))
+ echo 10
10
$ echo $(( ( 5+5 ) ))
+ echo 10
10

ご覧のとおり、$(...)最初のコマンドのコマンドはコマンドの代替として扱われます。このコマンドは実行コマンドを置き換えます((5+5))。これは出力のない算術評価なので、引数を使用せずに改行echo文字のみを使用します。

他の場合(そして私が追加した追加ケース)は$((...))算術拡張として扱われます。この計算の値は、(5+5)その計算の結果に置き換えられます。

bash混乱を避けるために、上記の最後のコマンドで示したように、パーサーが使用する構文グループ化の種類を確認できるようにスペースを使用することをお勧めします。

おすすめ記事