2017-02-06 67 views

回答

0

&&運算符是邏輯AND。它做了懶惰的評估:如果左邊的語句評估爲false(即非零返回碼),那麼應用邏輯AND仍然會評估爲false,因此評估正確的部分是無用的(在邏輯謂詞意義上)。

由於函數返回1(false就Bash而言),所以右側的所有內容都會被忽略,您的exit未被達到,並且echo語句被執行。

如果要強制在該行的所有命令的執行,而不是使用:

{ asdf ; echo 123 ; exit ; } 

像這樣的命令列表將始終評估他們每個人,不論他們的返回碼。請注意,最後一個分號是強制性的。

+0

討論退出狀態時儘量不要使用布爾術語。 'bash' * does *有一個上下文,布爾值用true表示爲1,false表示爲0,即算術表達式(嘗試'echo $((3 <5))''),所以最好保留真值的概念並取得成功。 – chepner

1

echo 123只會IFFasdf執行成功,你已經上漲短路運營商 - &&asdf;現在您有來自功能asdfreturn -ed,返回值爲1,而函數返回值爲asdf,因此命令asdf被認爲失敗,因此echo 123(當然還有exit)永遠不會運行。

echo 321沒有這樣的條件,因此它以通常的方式執行。