或者在 Solaris 中 Shell 脚本中的条件

Or condition in Shell script in Solaris

当我在 Solaris 中 运行 这段代码时 bash:

a=false;
b=false;

if [ $a -o $b ] ; then
    echo "_True"
else
    echo "_False"
fi

结果:

_True

脚本的输出不应该是false吗?

如果我将脚本修改成这样:

a=false;
b=false;

if [ $a = true -o $b = true ] ; then
    echo "_True"
else
    echo "_False"
fi

结果:

_False

但这并不是编写“$a = true”的良好编码习惯。

拜托,我能知道这是什么问题吗?解决方案究竟是什么?

[ 命令将所有 non-empty 字符串视为真。所以用一个空字符串来表示false,而不是字符串"false"。并记得引用变量。

a=
b=

if [ "$a" -o "$b" ]; then
    echo "_True"
else
    echo "_False"
fi

另一种选择是使用 truefalse 命令,而不是 [

a=false
b=false
if $a || $b; then
    echo "_True"
else
    echo "_False"
fi