在这里使用“x$START_DAEMON”=“xyes”有什么意义? (前导 x)

在这里使用“x$START_DAEMON”=“xyes”有什么意义? (前导 x)

这是 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

相关内容