或Solaris中的Shell脚本中的条件

Jay*_*shi 2 bash shell solaris

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

a=false;
b=false;

if [ $a -o $b ] ; then
    echo "_True"
else
    echo "_False"
fi
Run Code Online (Sandbox Code Playgroud)

结果:

_真正

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

如果我将脚本修改为这样的:

a=false;
b=false;

if [ $a = true -o $b = true ] ; then
    echo "_True"
else
    echo "_False"
fi
Run Code Online (Sandbox Code Playgroud)

结果:

_假

但是编写"$ a = true"并不是一个好的编码习惯.

拜托,我可以知道这里有什么问题吗?什么是解决方案?

Bar*_*mar 5

[命令将所有非空字符串视为true.因此,使用空字符串来表示false,而不是字符串"false".并记得引用变量.

a=
b=

if [ "$a" -o "$b" ]; then
    echo "_True"
else
    echo "_False"
fi
Run Code Online (Sandbox Code Playgroud)

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

a=false
b=false
if $a || $b; then
    echo "_True"
else
    echo "_False"
fi
Run Code Online (Sandbox Code Playgroud)