0
爲了把事情說清楚,我想我的短bash腳本:慶典「-e」益智遊戲:腳本文件結束意外
#!/bin/bash -e
p_time=$(expr 0 - 0)
echo ?
echo "process time(sec) is: " ${p_time}
之前「回聲?」,但如果我改變「p_time =文件將結束$(expr 0 - 0)「改爲」p_time = $(expr 3 - 0)「,文件將正確結束。
但是,如果我在第一句中刪除了「-e」,則文件也會正確結束。
爲什麼會發生這種情況?
這是很多人推薦不使用'-e'選項的原因之一;非零退出代碼並不總是表示*錯誤*。 – chepner
如果您有任何關於'set -e'的行爲是否理智和可預測的問題,請考慮參加[BashFAQ#105](http://mywiki.wooledge.org/BashFAQ/105)中的練習,或者順便說一下,在https://www.in-ulm.de/~mascheck/various/set-e/ –
順便說一下,表格顯示了不同shell的實現之間的不兼容問題。另外,'expr'是1970年代的遺蹟,應該不能用於現代腳本。 ''p_time = $((0 - 0))''可以保證符合1991 POSIX.2標準的每一個shell,並且* *效率更高(因爲它避免了fork()從子進程中退出)。 –