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

时间:2012-06-29 16:50:59

标签: autoconf

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

之类的条件
if test "x$want_boost" = "xyes"; then

为什么这不定义为:

if test "$want_boost" = "yes"; then

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:0)

在符合POSIX的外壳中,

test "$foo" = "$bar"

进行字符串比较,而不管变量foobar的内容如何。但是在不兼容的旧Shell中,如果foo包含以破折号开头的内容,则test会尝试将其解释为一元运算符,因此它将抛出语法错误或进行错误的测试。编写x"$foo" = x"$bar"使其不可能。我还隐约记得如果任何一个参数都扩展为空字符串时会出现问题,但是只有在您省略双引号的情况下才可能出现问题(在这种情况下,现代shell也会出现问题)。

这在编写配置脚本时特别重要,因为至少在原则上,无论shell环境有多旧,它们都应该起作用。如果您要在2020年编写新程序,那么使用C和autoconf的最合理的理由是您需要可移植到某些旧系统...