回答:
最初の例で$((X+1))
は、式X + 1を評価して結果に展開し、結果を変数に割り当てます。
2番目の例では、1 $((X=X+1))
ずつインクリメントX
し(これ$((X++))
も有効で短くなりますが、必ずしもシェルでサポートされる必要はありません)、$X
nullコマンドの最初の引数であるの新しい値に展開されます:
。nullコマンドは引数を無視し、結果は破棄されます(副作用があります)。
個人的には、次の3つの(比較的主観的な)理由により、最初の形式を好みます。
次のような1つのコマンドの環境を変更する場合は、最初のバージョンを使用する必要があります
X=$((X+1)) /usr/local/bin/something
引数に評価を直接追加するには、2番目の形式を使用する必要があります。
ls -la "file-$((X++))" # or ...
ls -la "file-$((X=X+1))" # for better compatibility
これには望ましい副作用があり、1行節約され、非常に明確です。