为什么autoconf脚本中的条件变量在变量前加“ x”?

问题描述 投票:6回答:2

为什么autoconf脚本中的条件语句在其变量前加上“ x”?例如,GNU提供的用于测试Boost的宏具有以下条件,例如

if test "x$want_boost" = "xyes"; then

为什么不定义为:

if test "$want_boost" = "yes"; then
autoconf
2个回答
8
投票

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


0
投票

在符合POSIX的外壳中,

test "$foo" = "$bar"

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

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

© www.soinside.com 2019 - 2024. All rights reserved.