在这里使用 "x$START_DAEMON" = "xyes" 有什么意义?(领先的x)

dai*_*isy 7 bash test

这是 fetchmail 守护进程脚本的一部分,

if [ ! "x$START_DAEMON" = "xyes" -a ! "$1" = "status" ]; then

使用有什么意义x$START_DAEMON = "xyes"?为什么不直接使用$START_DAEMON = "yes"

Lar*_*ach 8

我看到那里的情况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)