怎么做||运营商在bash工作?

时间:2018-02-07 18:23:03

标签: bash

我最近在shell脚本中遇到了一个代码片段,类似于下面的

a=23

echo $a || exit $?

我认为如果左侧的命令(本例中为echo $a)失败,则意图是退出脚本。它似乎也是这样工作的。

但是,我在解释这个问题时遇到了麻烦。我推理的方式是:

如果左侧命令返回非零,则整个表达式的计算结果为true,不需要评估右侧。左侧将被评估为命令的返回状态,如果命令失败则该命令的返回状态为非零,如果命令成功则为零。通过这种逻辑,只要命令成功,就会执行右侧(exit $?),并且只要命令不成功,就会执行短路(不执行)。但是执行脚本的实际行为恰恰相反。

这是如何工作的?左侧评估的内容是什么?

1 个答案:

答案 0 :(得分:3)

退出状态不是通常意义上的布尔值。 0表示成功,非零表示失败。当LHS 成功时({,当退出状态为0时),||运行RHS。