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))"