我最近在shell脚本中遇到了一个代码片段,类似于下面的
a=23
echo $a || exit $?
我认为如果左侧的命令(本例中为echo $a
)失败,则意图是退出脚本。它似乎也是这样工作的。
但是,我在解释这个问题时遇到了麻烦。我推理的方式是:
如果左侧命令返回非零,则整个表达式的计算结果为true,不需要评估右侧。左侧将被评估为命令的返回状态,如果命令失败则该命令的返回状态为非零,如果命令成功则为零。通过这种逻辑,只要命令成功,就会执行右侧(exit $?
),并且只要命令不成功,就会执行短路(不执行)。但是执行脚本的实际行为恰恰相反。
这是如何工作的?左侧评估的内容是什么?
答案 0 :(得分:3)
退出状态不是通常意义上的布尔值。 0表示成功,非零表示失败。当LHS 成功时({,当退出状态为0时),||
运行RHS。