Command-Line
為什麼bc除以0時退出0?
我試圖想出一種快速且說明性的方法來生成不成功的退出狀態,並認為除以零
bc
是個好主意。我驚訝地發現雖然它確實會產生執行時錯誤,但退出狀態仍然是 0:
$ echo 41 + 1 | bc 42 $ echo $? 0 $ echo 42/0 | bc Runtime error (func=(main), adr=6): Divide by zero $ echo $? 0
- 為什麼 bc 實用程序不會以非零退出狀態失敗?
注意:對於我正在使用的快速非零退出狀態
return 1
此外,從shell-tips:
$ expr 1 / 0 expr: division by zero $ echo $? 2
bc
實現的返回狀態略有不同,但總體構想是,如果您提供有效輸入bc
,則以狀態 0 退出。42/0
是有效輸入:沒有讀取錯誤,它甚至是語法上有效的表達式,因此bc
返回 0。如果您通過另一個操作的第二行,bc
將執行它。expr
這與評估單個算術表達式的目的不同。在這裡,單個表達式的結果決定了返回狀態。生成指示失敗的退出狀態的最直接方法是呼叫
false
. 諸如此類的事情expr 1 / 0
只在混淆程式競賽中佔有一席之地。