使用 ; || 和 && 的此命令的步骤是什么

使用 ; || 和 && 的此命令的步骤是什么

注意:ABC 是命令.....

请告诉我这些命令的步骤过程

A || B && C = 
A && B ; C = 

我真正想要的是这样的(但想了解上述步骤):

如果 A 失败,则运行 B,但如果 A 成功,则运行 C(如何使用“||”“;”和/或“&&”来做到这一点?)

我从此链接找到了信息,但它只显示了 2 个命令的步骤,而不是 3 个...... 哪一个更好:使用 ; 还是 && 在一行中执行多个命令?

答案1

从语言学上来说,你可以认为statement1 && statement2它本身就是“执行声明1,如果其退出状态为 0,则执行声明2”另一个statement1 || statement2语法本身翻译为“执行声明1,并且如果其退出状态为不是0,然后执行声明2“”。

这些运算符主要用于 if 结构的单一条件内。但它们也可以用于其他地方,以压缩令人困惑的语法。

分号;只是 Bash 的标准语句分隔符(例如,它允许您将两个语句放在同一行上,并在第一个语句之后立即运行第二个语句,除非与此解释无关的情况)。分号后的任何语句都将被解释,无论前一个返回值的结果(真/假)如何。

如果 A 失败,则运行 B,但如果 A 成功,则运行 C(如何使用“||”“;”和/或“&&”来做到这一点?)

A && C || B

让我们测试一下:

john@mypc:~/test$ ls
file-A.txt  file-B.txt  file-C.txt
john@mypc:~/test$ cat file-A.txt && cat file-C.txt || cat file-B.txt
file A content
file C content
john@mypc:~/test$ rm file-A.txt 
john@mypc:~/test$ ls
file-B.txt  file-C.txt
john@mypc:~/test$ cat file-A.txt && cat file-C.txt || cat file-B.txt
cat: file-A.txt: No such file or directory
file B content
john@mypc:~/test$

可以看到,只有当打印文件 A 失败时,才会打印文件 B 的内容。在我们删除文件 A 之前,其内容打印成功,之后只打印了文件 C 的内容。

另一方面,;符号与前一个返回代码无关。例如,给定三个命令 X、Y、Z,X && Y && Z不是如果 Y(或 X)返回非零退出代码,则执行语句 Z,而(出于所有意图和目的)X ; Y ; Z将独立于命令 X 和 Y 的退出代码执行所有三个语句。

相关内容