2016-07-05 82 views
4

查看Debian上/etc/init.d/hostapd中的問題。但是,我不知道這行代碼所做的也不是如何工作的

[ -n "$DAEMON_CONF" ] || exit 0 

在網上搜索對於bash教程,我從來沒有見過任何人這樣做

當我運行代碼,我的殼窗口關閉(因爲$ DAEMON_CONF沒有設置任何東西)。如果我將代碼更改爲

[ -n "not empty" ] || exit 0 

我的控制檯窗口未關閉。

因此,-n值爲true,並與退出或運算0,是什麼?

+1

一個黑客在一些程序返回到沉默與真正O形環錯誤。所以這個'||無論什麼意思總是執行任何東西,如果留在雙管符號的東西的「結果」計算結果爲false,用shell語言描述失敗的退出代碼... @ElliotFrisch確實將它放在更好的詞彙中 – Dilettant

+2

https:// en .wikipedia.org/wiki/Bash_(Unix_shell)#Conditional_execution –

+0

@MarcB感謝您的文檔鏈接! –

回答

4

如果[]中的表達式返回false,請執行或之後的操作(和exit 0)。否則,它會短路,下一個語句將被評估。

3

[是命令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 
2
[ -n "$DAEMON_CONF" ] || exit 0 

這是不必要的雙重否定。這將做同樣的事情:

[ -z "$DAEMON_CONF" ] && exit 0 

或者,它可能沒有任何標誌來完成:

[ "$DAEMON_CONF" ] || exit 0