这是 fetchmail 守护进程脚本的一部分,
if [ ! "x$START_DAEMON" = "xyes" -a ! "$1" = "status" ]; then
使用有什么意义x$START_DAEMON = "xyes"
;为什么不直接使用$START_DAEMON = "yes"
?
答案1
我见过这样的x$variable
案例不是引用,在这种情况下,它是为了处理变量($START_DAEMON
在本例中)可能为空的情况。否则,您的测试将检查是否! = "yes"
,并且测试将出错。然而,正如您在评论中指出的那样,双引号x$variable
可以解决这个问题。
另一方面,一个问题是服务器故障带我到这个页面: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