为什么Shell脚本比较经常使用x $ VAR = xyes?

我经常在使用自动工具(autoconf,automake)的项目的构建脚本中看到这种情况。当有人想要检查shell变量的值时,他们经常使用以下惯用法:


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

...

与像这样简单地检查值相比,这样做有什么好处:


if test $SHELL_VAR = "yes"; then

...

我认为一定有某种原因使我经常看到这种情况,但我无法弄清楚它是什么。


慕容708150
浏览 1014回答 3
3回答

慕慕森

如果您使用的是执行简单替换的外壳,并且SHELL_VAR变量不存在(或为空),则需要注意边缘情况。以下翻译将发生:if test $SHELL_VAR = yes; then        -->  if test = yes; thenif 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的壳,实际上是多余的,因为引号随之而来的是两个空的参数和一个容纳空间被解释为单个对象。
打开App,查看更多内容
随时随地看视频慕课网APP