configure脚本需要测试许多文件和字符串的属性。下面是在进行这些测试的时候需要提防的一些移植性问题。

程序test是进行许多文件和字符串测试的方式。人们使用替代(alternate)名['来调用它, 但因为[‘是一个m4的引用字符,在Autoconf代码中使用`[‘将带来麻烦。

如果你需要通过test创建多个检查,就用shell操作符&&'和||’把它们组合起来,而不是使用test操作符-a'和-o’。在System V中,-a'和-o’相对于unary操作符的优先级是错误的;为此,POSIX并未给出它们,所以使用它们是 不可移植的。如果你在同一个语句中组合使用了&&'和||’,要记住它们的 优先级是相同的。

为了使得configure脚本可以支持交叉编译,它们不能作任何测试主系统而不是测试目标系统的事。但你偶尔 可以发现有必要检查某些特定(arbitrary)文件的存在。为此,使用test -f'或者test -r’。 不要使用`test -x’,因为4.3BSD不支持它。

另一个不可移植的shell编程结构是

var=${var:-value}
它的目的是仅仅在没有设定var的值的情况下,把var设置成value, 但如果var已经含有值,即使是空字符串,也不修改var。老式BSD shell,包括 Ultrix sh,不接受这个冒号,并且给出错误并停止。一个可以移植的等价方式是

: ${var=value}