为什么'x'用于[x"$ VAR"= x"VALUE"]?

Vol*_*lyy 3 unix shell

我可以在unix shell脚本中看到后续构造使用

[ x"$VAR" = x"VALUE" ] 
Run Code Online (Sandbox Code Playgroud)

代替

[ "$VAR" = "VALUE" ] 
Run Code Online (Sandbox Code Playgroud)

为什么?

And*_*yle 9

因为如果其中一个变量是空的,shell并不总是完全表现良好.

考虑是否$VAR为空/ null并且$VALUE是"foo",您的两个构造扩展为:

[ x = xfoo ]
Run Code Online (Sandbox Code Playgroud)

[ = foo ]
Run Code Online (Sandbox Code Playgroud)

后者会因为非法构造而导致某些shell出错,而前者在任何情况下都有效.这在最近版本的bash中可能不是问题(甚至可能是bash的旧版本),但这就是历史上的问题 - 除了偶尔出现在你情况下的人们的困惑时刻之外,没有理由这样做与兼容性更广泛的贝壳.

  • 使用引号(和现代shell),你不需要'x' - `["$ var"="val"]`变成,当var为空时:`[""="val"]`这是只是假,没有错误. (3认同)
  • 我的例子中有引号.我说["x"= x"foo"]不是[x = xfoo] (2认同)