我有一個測試腳本是這樣的:爲什麼這個bash快捷鍵不起作用?
asdf() {
return 1
}
asdf && echo 123 && exit
echo 321
321 outputed而不是123
這是爲什麼?
我有一個測試腳本是這樣的:爲什麼這個bash快捷鍵不起作用?
asdf() {
return 1
}
asdf && echo 123 && exit
echo 321
321 outputed而不是123
這是爲什麼?
&&
運算符是邏輯AND。它做了懶惰的評估:如果左邊的語句評估爲false
(即非零返回碼),那麼應用邏輯AND仍然會評估爲false
,因此評估正確的部分是無用的(在邏輯謂詞意義上)。
由於函數返回1(false
就Bash而言),所以右側的所有內容都會被忽略,您的exit
未被達到,並且echo
語句被執行。
如果要強制在該行的所有命令的執行,而不是使用:
{ asdf ; echo 123 ; exit ; }
像這樣的命令列表將始終評估他們每個人,不論他們的返回碼。請注意,最後一個分號是強制性的。
echo 123
只會IFFasdf
執行成功,你已經上漲短路運營商 - &&
後asdf
;現在您有來自功能asdf
的return
-ed,返回值爲1,而函數返回值爲asdf
,因此命令asdf
被認爲失敗,因此echo 123
(當然還有exit
)永遠不會運行。
echo 321
沒有這樣的條件,因此它以通常的方式執行。
討論退出狀態時儘量不要使用布爾術語。 'bash' * does *有一個上下文,布爾值用true表示爲1,false表示爲0,即算術表達式(嘗試'echo $((3 <5))''),所以最好保留真值的概念並取得成功。 – chepner