計算された結果が0の場合、「let」がコード1で終了するのはなぜですか?

計算された結果が0の場合、「let」がコード1で終了するのはなぜですか?

私は偶然会ったこれ質問作成者は、 let x=1-1コード 1 で終了して発生した問題を解決しました。

~によるとバッシュマニュアル:

最後の式が0と評価された場合、letは1を返し、そうでない場合は0を返します。 (ページ 56-57)

私はbashのニュアンスについてよく知らないので、「この動作の原因は何ですか?」という質問があります。おそらくゼロが「false」と解釈されるからでしょうか?私のようなbash初心者には、算術式の結果が0になり、エラー終了コードが発生することが少し奇妙です。

答え1

0 の整数値は次のように評価されます。間違ったほとんどの汎用プログラミング言語でブールコンテキストで使用されている場合。これは、次のCコードに似たコードがある可能性があることを意味します。

c = 100;
while (--c) { /* do something while c is non-zero */ }

シェルでは、終了状態 1 は次のように評価されます。間違った条件付きコンテキストで使用される場合。

c=100
while let --c; do
    # do something while c is non-zero
done

ここにパターンが見えますか?ループは、ゼロ以外の終了状態が返されるwhileまで実行され、ゼロに達すると返されます。この場合、終了状態がゼロでないことは「エラー」を意味するのではなく、結果に達したという意味にすぎません。letclet0

ただし、これは通常次のように(算術評価)letに置き換えられます。((...))

c=100
while ((--c)); do ...; done

while上記のループは組み込みcユーティリティletです((...))

関連情報