2013-07-23 68 views

回答

3

bash的手冊set -e說:

The shell does not exit if the command that fails is [...] 
part of any command executed in a && or || list except the 
command following the final && or || 

儀表手冊說:

If not interactive, exit immediately if any untested command fails. 
The exit status of a command is considered to be explicitly tested 
if the command is used to control an if, elif, while, or until; 
or if the command is the left hand operand of an 「&&」 or 「||」 operator. 

測試,外殼將提前停止的「左測試期間手操作數「。 因爲還有測試,它會認爲整個命令是「測試」,因此不會中止。

OR測試,外殼具有運行所有(兩者)測試,一旦最後一次測試失敗,它會認爲出現了一個未經檢查的錯誤,因此將中止。

我同意這有點違反直覺。

+0

我喜歡破折號的解釋,謝謝你的發佈! – spbnick

+0

很好的解釋,謝謝 – dspjm

1

因爲作爲擊手冊說關於set -e

殼做如果失敗的命令是立即同時或直到關鍵字,測試 的一部分,下面以下命令 列表的一部分不會退出if或elif保留字,在 & &或||中執行的任何命令的一部分。除了最後的命令& &或||,任何命令 在一個管道中,但最後一個,或者命令的返回值是 與!

ls notexist || ls notexist命令終止shell,因爲第二個(最後一個)ls notexist退出失敗。 ls notexist && ls notexist不終止外殼,因爲執行「& &列表」在第一個ls notexist失敗並且第二個(最後一個)永遠不會到達後停止。

順便說一句,使用truefalse代替ls notexist等特定命令,可以更輕鬆,更可靠地進行這樣的測試。

相關問題