我经常在使用自动工具(autoconf,automake)的项目的构建脚本中看到这种情况。当有人想要检查shell变量的值时,他们经常使用以下惯用法:if test "x$SHELL_VAR" = "xyes"; then...与像这样简单地检查值相比,这样做有什么好处:if test $SHELL_VAR = "yes"; then...我认为一定有某种原因使我经常看到这种情况,但我无法弄清楚它是什么。
3 回答
慕慕森
TA贡献1856条经验 获得超17个赞
如果您使用的是执行简单替换的外壳,并且SHELL_VAR变量不存在(或为空),则需要注意边缘情况。以下翻译将发生:
if test $SHELL_VAR = yes; then --> if test = yes; then
if test x$SHELL_VAR = xyes; then --> if test x = xyes; then
由于test缺少第一个参数,第一个会产生错误。第二个没有那个问题。
您的案例翻译如下:
if test "x$SHELL_VAR" = "xyes"; then --> if test "x" = "xyes"; then
的x,至少对于符合POSIX的壳,实际上是多余的,因为引号随之而来的是两个空的参数和一个容纳空间被解释为单个对象。
- 3 回答
- 0 关注
- 1013 浏览
添加回答
举报
0/150
提交
取消