如何测试多个变量是否为空字符串

And*_*eas 3 bash sh

我想测试多个变量以查看它们是否为空。所以我做了以下事情:

if [ test -z "$VAR1" ] || [ test -z "$VAR2" ]
then
   echo "Empty!"
fi
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用。输出是:

[: -z: binary operator expected
[: -z: binary operator expected
Run Code Online (Sandbox Code Playgroud)

我做错了什么?如果我省略OR (||) 条件,上面的代码就可以正常工作。

Gra*_*eme 5

使用括号或test命令,不要同时使用。以下任一方法都可以:

if [ -z "$VAR1" ] || [ -z "$VAR2" ]
then
   echo "Empty!"
fi
Run Code Online (Sandbox Code Playgroud)

或者:

if test -z "$VAR1" || test -z "$VAR2"
then
   echo "Empty!"
fi
Run Code Online (Sandbox Code Playgroud)

在一些旧的 shell 中[只是test命令的别名。你甚至可能错过结束](或在之后添加test),一切都会好起来的。如今,bash这会给出语法错误。然而,这两种(正确的)语法在功能上仍然是等效的,并且可以互换使用,但不能同时使用。