変数を前後にインクリメントする場合、POSIXシェルでは、これら2つの例の違いは何ですか。それらは同じ結果をもたらすように見えますが、使用方法は異なりますか?どちらを優先しますか?
X=$((X+1))
: $((X=X+1))
最初の例では、$((X+1))
は式X + 1を評価し、結果に展開して、変数に割り当てます。
2番目の例では、$((X=X+1))
はX
を1つインクリメントし($((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行節約され、非常に明確です。