2016-07-05 80 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