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