这是 fetchmail 守护进程脚本的一部分,
if [ ! "x$START_DAEMON" = "xyes" -a ! "$1" = "status" ]; then
使用有什么意义x$START_DAEMON = "xyes"
?为什么不直接使用$START_DAEMON = "yes"
?
我看到那里的情况x$variable
是没有报价,而在这种情况下它的处理,其中变量(情况$START_DAEMON
在这种情况下)可能是空的。否则,您的测试将检查是否! = "yes"
,并且测试会出错。但是,正如您在评论中指出的那样,双引号x$variable
可以解决这个问题。
另一方面,关于ServerFault 的一个问题让我进入了这个页面:http : //pubs.opengroup.org/onlinepubs/009695399/utilities/test.html,其中一个是防止变量扩展以可能会混淆的字符开头[
或者test
即便如此,我认为这可能只是在较旧的(如 opengroup 页面所说的“历史”)shell 中出现的问题,并且较新的实现在没有 . 的情况下做正确的事情x
,只要至少涉及双引号. 所以它可能主要是一种编码传统。不过,我能够确认/bin/sh
在 SunOS 5.10 上使用的问题:
# a="!"; [ "$a" = "yes" ] && echo ok
test: argument expected
Run Code Online (Sandbox Code Playgroud)