查看Debian上/etc/init.d/hostapd中的問題。但是,我不知道這行代碼所做的也不是如何工作的
[ -n "$DAEMON_CONF" ] || exit 0
在網上搜索對於bash教程,我從來沒有見過任何人這樣做
當我運行代碼,我的殼窗口關閉(因爲$ DAEMON_CONF沒有設置任何東西)。如果我將代碼更改爲
[ -n "not empty" ] || exit 0
我的控制檯窗口未關閉。
因此,-n值爲true,並與退出或運算0,是什麼?
查看Debian上/etc/init.d/hostapd中的問題。但是,我不知道這行代碼所做的也不是如何工作的
[ -n "$DAEMON_CONF" ] || exit 0
在網上搜索對於bash教程,我從來沒有見過任何人這樣做
當我運行代碼,我的殼窗口關閉(因爲$ DAEMON_CONF沒有設置任何東西)。如果我將代碼更改爲
[ -n "not empty" ] || exit 0
我的控制檯窗口未關閉。
因此,-n值爲true,並與退出或運算0,是什麼?
如果[]
中的表達式返回false,請執行或之後的操作(和exit 0
)。否則,它會短路,下一個語句將被評估。
[
是命令test
的替代名稱。您可以瞭解這些參數/標誌諸如此類的東西通過觀察測試的手冊頁:
man test
您會看到-n
:
-n STRING
the length of STRING is nonzero
Furthemore ||
手段OR
。所以如果test
命令返回False
那麼||
之後的內容將被執行。如果test
返回true,那麼它將不會被執行。
寫出你的命令說:「如果變量$ DAEMON_CONF缺少一個值,然後退出,返回代碼0」
的手寫版會是這樣的:
if test ! -n "$DAEMON_CONF"; then
exit 0
fi
[ -n "$DAEMON_CONF" ] || exit 0
這是不必要的雙重否定。這將做同樣的事情:
[ -z "$DAEMON_CONF" ] && exit 0
或者,它可能沒有任何標誌來完成:
[ "$DAEMON_CONF" ] || exit 0
一個黑客在一些程序返回到沉默與真正O形環錯誤。所以這個'||無論什麼意思總是執行任何東西,如果留在雙管符號的東西的「結果」計算結果爲false,用shell語言描述失敗的退出代碼... @ElliotFrisch確實將它放在更好的詞彙中 – Dilettant
https:// en .wikipedia.org/wiki/Bash_(Unix_shell)#Conditional_execution –
@MarcB感謝您的文檔鏈接! –