我知道我可以在Bash中测试一个空字符串,-z
如下所示:
if [[ -z $myvar ]]; then do_stuff; fi
Run Code Online (Sandbox Code Playgroud)
但我看到很多代码写得像:
if [[ X"" = X"$myvar" ]]; then do_stuff; fi
Run Code Online (Sandbox Code Playgroud)
这种方法更便携吗?它只是在日子之前的历史残余-z
吗?它适用于POSIX shell(即使我已经看到它用于脚本定位bash
)?准备好我的历史/可移植性课程.
在服务器故障上询问的问题是如何确定bash变量是否为空?但没有人提供解释为什么你看到代码与X""
东西.
我经常在使用autotools(autoconf,automake)的项目的构建脚本中看到这一点.当有人想检查shell变量的值时,他们经常使用这个习惯用法:
if test "x$SHELL_VAR" = "xyes"; then
...
Run Code Online (Sandbox Code Playgroud)
与简单地检查这样的值相比,这有什么好处:
if test $SHELL_VAR = "yes"; then
...
Run Code Online (Sandbox Code Playgroud)
我认为必须有一些原因让我经常看到这一点,但我无法弄清楚它是什么.