查看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感谢您的文档链接! –