A && B ; C
A 返回退出状态为零。
B 返回非零退出状态。
如果执行 C,则返回退出状态为零。
那么,以下两种情况中的哪一种会发生(A被认为在任何一种情况下都会执行):
Bash 将执行 B 和 C
Bash 会执行 B 但不会执行 C
作为这个问题的扩展,我们将如何修改链以允许替代方案(1 或 2)的行为?
编辑:
我不是在问 && 与 ; 的含义。.
我知道 A 和 B 无论如何都会被执行。剩下的情况是要么忽略 C,因为 B 返回非零退出状态,要么跳过 B 并根据自身的优点重新评估 C。
在这种情况
B
下,接下来将运行,并且无论 and 的退出值如何A
,B
都C
将运行。那个序列组 like
(A && B) ; C
,而不是 asA && (B ; C)
。如果需要,您可以添加带有大括号或括号(子外壳)的分组。这没有多大意义:基于 B 本身的退出状态,B 不能被忽略。
当且仅当 A 返回虚假(非零)状态,而不是返回真实(零)状态时,才跳过 B。
请注意,与例如零为假的 C 语言相比,shell 对数字的真值有一个颠倒的想法。
如果 A 返回虚假(非零)状态,则 B 不会运行,但 C 仍然会运行。