&& 和 ;链接命令: C 是否在 A && B 中执行; C 如果 B 返回非零退出状态?

&& 和 ;链接命令: C 是否在 A && B 中执行; C 如果 B 返回非零退出状态?
A && B ; C
  • A 返回退出状态为零。

  • B 返回非零退出状态。

  • 如果执行 C,则返回退出状态零。

那么,以下两种情况中的哪一种会发生(无论哪种情况,A都理所当然地执行):

  1. Bash 将执行 B 和 C

  2. Bash 将执行 B 但不执行 C

作为这个问题的延伸,我们如何修改链以允许替代方案(1 或 2)的行为?

编辑:

我不是在问 && 与 ; 的含义。 。

我知道A和B无论如何都会被处决。剩下的情况是要么忽略 C,因为 B 返回非零退出状态,要么跳过 B 并根据其自身优点重新评估 C。

答案1

A && B ; C

A 返回退出状态为零。

在这种情况下B,接下来将运行,并且无论 和 的退出值如何ABC将运行。

该序列组为 like (A && B) ; C,而不是 as A && (B ; C)。如果需要,您可以添加带有大括号或圆括号(子外壳)的分组。

剩下的情况是 B 和 C 都被忽略,因为 B 返回非零退出状态,

这没有多大意义:B 不能根据 B 本身的退出状态而被忽略。

或者跳过 B 并根据其自身优点重新评估 C。

当且仅当 A 返回假(非零)状态时,B 才会被跳过,如果它返回真(零)状态,则不会被跳过。

请注意,与 C 语言相比,shell 对数字真值的理解是相反的,其中零为假。

如果 A 返回假(非零)状态,则 B 不会运行,但 C 仍然运行。

相关内容