逻辑表达式在 Bash 中似乎以向后的方式计算,而不是像 C 这样的编程语言。
例如,echo 将在成功时返回 0,所以我期望:
echo hi || echo back4more
将打印 hi
然后将 back4more
打印到标准输出,因为首先返回 0 并且第二个语句需要被检查以确定整个逻辑 OR 表达式的真实性。但是,它只打印 hi
。
同样,这可以从:
echo hi && echo back4more
我希望打印 hi
就是这样,因为 echo 首先返回 0,因此 0 &&(逻辑)始终为假,因此无需评估(逻辑)。但真正发生的是 hi
和 back4more
被打印出来。
为什么会这样?
答案 0 :(得分:2)
成功不是真理。
零 退出状态 表示成功。非零退出状态表示失败。
零算术值在逻辑上是布尔假。非零算术值在逻辑上为布尔真。
<块引用>为什么会这样?
||
检查失败。因为 echo
以 0 退出状态退出,表示成功,||
的右侧不执行。