注意:ABC 是命令......
请告诉我这些命令的步骤过程是什么,以便我可以更好地理解该语言。
A || B ; C = If A fails then run B then C?
A ; B || C = Run A then B then C if (B fails... or is it if A fails?)?
我真正想要的是这样的(但想了解上面的步骤):
如果 A 失败,则运行 B,但如果 A 成功,则跳过 B 然后运行 C、d、e 等(如何使用“||”、“;”和/或“&&”执行此操作?)
我从这个链接找到了信息,但它只显示了2个命令的步骤,而不是3个......https://askubuntu.com/questions/334994/which-one-is-better-using-or-to-execute-multiple-commands-in-one-line
另一个链接没有回答这个问题的原因:
所以,下次如果你需要链接 4 个命令,你会问一个新问题,因为这里的答案只显示 3 个命令如何工作? – don_crissti26 分钟前
不,先生,因为我会理解未来的语言下一步:)。主要是因为这个......:我不清楚命令和开关(?)“||”按顺序(在本例中为命令C)是否始终查看命令(A)或者是否正在查看命令(B) )。这主要是因为我对有人这样说感到困惑:A || B = 如果 A 失败则运行 B.. 不确定下一个命令(C、D 等)是否也会查看 A :)(呃,看起来就是这样,但我不知道这种语言..所以必须弄清楚)。
答案1
A || B ; C
如果 A 以非零状态退出,则运行 B。C 无条件运行
A ; B || C
运行 A。然后运行 B。如果 B 以非零状态退出,则运行 C
切向地,你有时会看到A && B || C
.这通常是作为 的简写if A; then B; else C; fi
。然而,有一个主要区别:
A && B || C
- 如果A失败,则运行C
- 如果A成功,则运行B。
- 如果 B 失败,则运行 C
if A; then B; else C; fi
- 如果A失败,则运行C
- 如果A成功,则运行B。
- 如果 B 失败,则不执行 C
演示:
$ (echo A; exit 0) && (echo B; exit 1) || (echo C; exit 2); echo $?
A
B
C
2 # <== the exit status of C
$ if (echo A; exit 0); then (echo B; exit 1); else (echo C; exit 2); fi; echo $?
A
B
1 # <== the exit status of B
答案2
一个简单的测试
(echo -n "hello" || echo -n "world") && echo "!"
产生“你好!”
或者(使陈述 A 为假)
( false || echo -n "world") && echo "!"
产生“世界!”
OR 运算符是惰性的,因此如果 A 在 (A || B) 中为 true,则永远不会计算 B,因为 True OR True == True 和 True OR False == True