2

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

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

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

-o 逻辑或

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

这些类似于在双括号中使用的 Bash 比较运算符 && 和 ||。[[ 条件1 && 条件2 ]]

所以如果两者都是假的,那么它应该返回假?那为什么它打印“真实”?

4

2 回答 2

4

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

于 2013-08-08T07:37:37.040 回答
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
于 2013-08-08T07:38:00.123 回答