Bash

當計算結果等於 0 時,為什麼 ’let’ 以程式碼 1 退出?

  • October 4, 2021

我遇到了這個問題,其作者處理了由以下原因引起的問題: let x=1-1以程式碼 1 退出。

根據bash手冊

如果最後一個表達式的計算結果為 0,則 let 返回 1;否則返回 0。(第 56-57 頁)

我對 bash 的細微差別不太熟悉,所以我的問題是“這種行為的原因是什麼?”。可能是因為 0 解釋為“假”?對於像我這樣的 bash 初學者來說,算術表達式的結果為 0 會導致錯誤退出程式碼,這有點奇怪……

在大多數通用程式語言的布爾上下文中使用時,零整數值的計算結果為*false 。*這一事實意味著您可能擁有類似以下 C 程式碼的程式碼。

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

在 shell 中,在條件上下文中使用時,退出狀態為false 。

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

你看到這裡的模式了嗎?while循環執行直到返回一個let非零退出狀態,它在c達到零時執行。在這種情況下,非零退出狀態並不意味著“錯誤”,它只意味著let到達了結果0

但是,現在通常let((...))(算術評估)代替,如

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

值得重複的是,while上面的循環並不關心c. 他們關心let內置實用程序和((...)).

引用自:https://unix.stackexchange.com/questions/671818