我可以在unix shell脚本中看到后续构造使用
[ x"$VAR" = x"VALUE" ]
Run Code Online (Sandbox Code Playgroud)
代替
[ "$VAR" = "VALUE" ]
Run Code Online (Sandbox Code Playgroud)
为什么?
因为如果其中一个变量是空的,shell并不总是完全表现良好.
考虑是否$VAR为空/ null并且$VALUE是"foo",您的两个构造扩展为:
[ x = xfoo ]
Run Code Online (Sandbox Code Playgroud)
和
[ = foo ]
Run Code Online (Sandbox Code Playgroud)
后者会因为非法构造而导致某些shell出错,而前者在任何情况下都有效.这在最近版本的bash中可能不是问题(甚至可能是bash的旧版本),但这就是历史上的问题 - 除了偶尔出现在你情况下的人们的困惑时刻之外,没有理由不这样做与兼容性更广泛的贝壳.