Bash
當計算結果等於 0 時,為什麼 ’let’ 以程式碼 1 退出?
我遇到了這個問題,其作者處理了由以下原因引起的問題:
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
內置實用程序和((...))
.