shell脚本不适用于-z或与-z一起使用的条件

shell脚本不适用于-z或与-z一起使用的条件,shell,Shell,我的文件名为test2.sh 我正在使用./test2.sh执行文件 #!/bin/bash a="1111" b="" if [ -z $b -o -z $a ] then echo "a or b is empty" else echo "a and b not empty" fi 它总是在输出中显示a和b不为空。 怎么了 如果我只使用[-z$b],那么它就工作了 我也尝试过[-z$b-o-a$b],然后它就开始工作了 同时使用-o-z有什么问题吗 如果我理解你的问题,你可以这样尝试:

我的文件名为test2.sh

我正在使用./test2.sh执行文件

#!/bin/bash

a="1111"
b=""
if [ -z $b -o -z $a ]
then
echo "a or b is empty"
else
echo "a and b not empty"
fi
它总是在输出中显示a和b不为空。 怎么了

如果我只使用[-z$b],那么它就工作了

我也尝试过[-z$b-o-a$b],然后它就开始工作了


同时使用-o-z有什么问题吗

如果我理解你的问题,你可以这样尝试:

#!/bin/bash

a="1111"
b=""
if [ -z "$b" ] || [ -z "$a" ]
then
echo "a or b is empty"
else
echo "a and b not empty"
fi
输出:

a=“1111”和b=”“=>a或b为空

a=”“和b=”“=>a或b为空

a=“”和b=“111”=>a或b为空

a=“11”和b=“22”=>a和b不是空的


我希望这会有所帮助

如果我理解了你的问题,你可以这样尝试:

#!/bin/bash

a="1111"
b=""
if [ -z "$b" ] || [ -z "$a" ]
then
echo "a or b is empty"
else
echo "a and b not empty"
fi
输出:

a=“1111”和b=”“=>a或b为空

a=”“和b=”“=>a或b为空

a=“”和b=“111”=>a或b为空

a=“11”和b=“22”=>a和b不是空的

我希望这有帮助

您也应该会遇到“参数太多”错误,因为如果不引用参数扩展,您的命令将变成
[-z-o-z 1111]
。始终引用参数展开式。此外,切勿使用
-o
;使用
|
连接两个独立的
测试
命令,如
[-z]
所示,因为
-z
是一个非空字符串。您还应该得到一个“参数太多”错误,因为如果不引用参数扩展,您的命令将变成
[-z-o-z 1111]
。始终引用参数展开式。此外,切勿使用
-o
;使用
|
连接两个独立的
测试
命令,如
[-z]
所示,由于
-z
是非空字符串,因此其本身始终为真。