或者在 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
另一种选择是使用 true
和 false
命令,而不是 [
。
a=false
b=false
if $a || $b; then
echo "_True"
else
echo "_False"
fi
当我在 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
另一种选择是使用 true
和 false
命令,而不是 [
。
a=false
b=false
if $a || $b; then
echo "_True"
else
echo "_False"
fi