a-=2コマンドが失敗するのはなぜですか?

a-=2コマンドが失敗するのはなぜですか?

コマンドを実行した後、コマンドはdeclare -i a=5成功a+=2しますが、コマンドはa-=2失敗します。誰かがbashの奇妙な動作を説明できますか?

ベストアンサー1

Bashにはデフォルトのシェル構文に-=代入演算子はありません(算術コンテキストは異なります。以下を参照)。つまり、=変数に代入を使用したり、非整数変数に追加したり、整数変数に追加したりできますが、+=これには関係ありません。 Bashで構文を借りたKshでも同様です(この場合は他の多くの場合と同様)。 Zshも同様の機能を持っています。-=*=

他の組み合わせ割り当て演算子は、+=とにかく整数ではない変数にはあまり意味がなく、一般的な「文字列」変数が最も一般的な変数なので、基本構文でこれらの演算子を使用することはおそらく価値がありません。特にvar*=123それは球体であり、var/=123パスのように見えるからです。しかし、私が言ったように、+=この整数ではない場合はうまくいきます。

$ foo=123; foo+=456; echo $foo
123456

-=いつものように、マニュアルはこれについて少し簡単に説明し、欠落による欠陥のみを文書化します。部分3.4 シェルパラメータ変数の割り当ては説明され、言及されていますが、+=他には何もありません。

もちろん、算術的な文脈では($(( .. ))etc。(( .. )))、などすべて可能です+=-=*=:

$ foo=456; (( foo -= 123 )); echo $foo
333

おすすめ記事