在编写你自己的测试时,为了使你的代码可以移植,你应该避免使用某些shell脚本编程技术。 Bourne shell和诸如Bash和Korn shell之类的向上兼容的shell已经发展了多年,但为了避免麻烦,不要利用 在UNIX版本7,circa 1977之后添加的新特征。你不应该使用shell函数、别名、负字符集(negated character classes) 或者其它不是在所有与Bourne兼容的shell中都能找到的特征;把你自己限制到最低的风险中去。 (the lowest common denominator)。即使是unset都不能够被所有的shell所支持! 还有,像下面那样在指定解释器的惊叹号之后给出空格:
#! /usr/bin/perl
如果你忽略了路径之前的空格,那么基于4.2BSD的系统(比如说Sequent DYNIX)将忽略这一行,这是因为它们把`#! /‘看作一个四字节的魔数(magic number)。
你在configure脚本中运行的外部程序,应该是一个相当小的集合。关于可用的外部程序列表,参见 GNU编码标准中的‘Makefile中的工具’一节。这个限制允许用户在只拥有相当少的程序时进行配置 和编译,这避免了软件包之间过多的依赖性。
此外,这些外部工具中的某些工具只有一部分特征是可移植的。例如,不要依赖ln支持-f'选项, 也不要依赖cat含有任何选项。sed脚本不应该含有注释,也不应该使用长于8个字符的分支标记。 不要使用
grep -s’来禁止(suppress)输出。而要把grep的标准输出和标准错误输出 (在文件不存在的情况下会输出信息到标准错误输出)重新定向到`/dev/null’中。检查grep的退出 状态以确定它是否找到了一个匹配。