或bash中的逻辑运算符

时间:2013-08-08 07:35:49

标签: bash logical-operators

我有一个非常愚蠢的问题,但无法绕过它

if [[ false || false ]] ; then
        echo 'true'
else
        echo 'false'
fi

根据http://tldp.org/LDP/abs/html/comparison-ops.html

  

-o logical或

     

如果exp1或exp2为真,则exp1 -o exp2返回true。

     

这些类似于Bash比较运算符&&和||,使用   在双括号内。 [[condition1&& condition2]]

所以如果两者都是假的那么它应该返回false?那为什么它打印'真'?

2 个答案:

答案 0 :(得分:4)

“假”不是假的。 “false”是非空字符串。默认情况下,非空字符串在[[中为真。

答案 1 :(得分:4)

您应该运行那些不是条件命令'[[]]'的一部分:

if false || false; then
        echo 'true'
else
        echo 'false'
fi

至于[[和]]中的测试错误:

if [[ ! 1 || ! 1 ]]; then
        echo 'true'
else
        echo 'false'
fi

注意[[false]]等同于[[-n false]],这是一个真实的条件。

如果您愿意,可以使用(())进行更明显和有效的条件测试:

if (( 0 || 0 )); then
        echo 'true'
else
        echo 'false'
fi