bashincrement: `n = 0;((n ++)); `がエラーを返すのはなぜですか? [コピー]

bashincrement: `n = 0;((n ++)); `がエラーを返すのはなぜですか? [コピー]
n=0;
((n++));echo "ret=$?;n=$n;"
((n++));echo "ret=$?;n=$n;"
((n++));echo "ret=$?;n=$n;"

最初からエラーが返された場合にのみ動作しn=1、問題が発生した状況を使用しています。((n++))
n=0((n++))
trap '' ERR

これはバグですか?

答え1

これは、の戻り値が(( expression ))エラー表示に使用されないためです。bashマンページから:

((表現する))

これ表現する下記の規則に従って評価されます。算術評価。式がゼロでないと評価された場合、戻り状態は0で、そうでない場合は戻り状態は1です。これはまったく同じです許す表現する」。

したがって、あなたの場合、式の値ははい0、戻り状態は(( ... ))1です。

答え2

その理由は上記のpmosに書かれているようです。

1つの解決策は増分を使用することです((++n))。あなたの式は決してゼロと評価されないので、エラーは発生しないようです。

答え3

あなたがしなければならないこと:

echo "$((n+=1))"

トラップは発生しません。唯一の報酬はから来ますecho

または、スタンドアロンとして使用する場合は、$n次の2つの形式は、20桁未満の場合は常にtrueを返します。

n=$((n+1))

または:

: "$((n+=1))"

関連情報