为什么autoconf脚本中的条件前缀变量带有"x"?

dfk*_*k22 6 autoconf

为什么autoconf脚本中的条件语句将其变量用"x"作为前缀?例如,GNU提供的用于测试Boost的宏具有诸如的条件

if test "x$want_boost" = "xyes"; then
Run Code Online (Sandbox Code Playgroud)

为什么这不定义为:

if test "$want_boost" = "yes"; then
Run Code Online (Sandbox Code Playgroud)

twa*_*erg 8

在一些早期的shell中,测试空字符串变量并不像现在这么简单,所以最好的选择是查看"x $ variable"是否等于"x".此外,由于这显然是使用test,这比试图正确引用/转义序列如"$ x!="y"'更简单,而不会失去理智和/或可移植性.

  • 澄清:"并不像现在这么简单"意味着许多炮弹都是错误的,并且无法正确评估带有空字符串的命令,例如`test""="foo"` (2认同)
  • 其他必要的原因是,如果$ variable扩展为以破折号开头的内容,则test可能会将其解释为选项而不是要比较的字符串。在现代外壳中,等号优先,但并非总是如此。 (2认同)