Command-Line

為什麼bc除以0時退出0?

  • April 5, 2017

我試圖想出一種快速且說明性的方法來生成不成功的退出狀態,並認為除以零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只在混淆程式競賽中佔有一席之地。

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