📜  && 和 ; 的区别Linux 中的链接运算符

📅  最后修改于: 2021-09-14 01:24:25             🧑  作者: Mango

逻辑与运算符(&&):

只有当第一个命令成功执行时才会执行第二个命令,即它的退出状态为零。此运算符可用于检查第一个命令是否已成功执行。这是命令行中最常用的命令之一。

句法:

command1 && command2

如果 command1 已成功执行,则 command2 将执行。这个运算符允许我们检查 command1 的退出状态。

分号运算符(;):

它用于一次性执行多个命令。可以使用此运算符将多个命令链接在一起。执行此运算符之后的命令将始终在其前面的命令执行后执行,而不管前面命令的退出状态如何。命令总是按顺序执行。由分号运算符分隔的命令按顺序执行,shell 依次等待每个命令终止。返回状态是最后执行的命令的退出状态。

句法:

command1 ; command2

第二个命令的执行与第一个命令的退出状态无关。如果第一个命令没有成功执行,那么第二个命令也会被执行。

AND(&&) 和 SEMI-COLON(;)运算符的区别:

&& (logical AND) operator

; (Semi-colon) operator

The execution of the second command depends on the execution of the first command The execution of the second command is independent of the execution status of the first command.
If the exit status of the preceding command is non-zero, the succeeding command will not be executed. Even If the exit status of the first command is non-zero, the second command will be executed.
Allows conditional execution Does not allow conditional execution.
Bash has short-circuited evaluation of logical AND. No short circuit evaluation is needed.
Logical AND has higher precedence. It has lesser precedence than logical AND.

示例 1:

[ -z $b ] && b = 10
[ -z $b ] && b = 15

第一个命令检查变量 b 是否存在,如果存在,则将其初始化为 10。考虑到 b 不存在,因此第一个命令的退出状态为 0,因此执行第二个命令并使用 10 初始化 b。现在,如果我们再次尝试使用相同的命令初始化它,那么它将不会被执行,因为第一个命令的退出状态为 1,因为 b 已经存在。如果我们再次使用 echo 显示 b ,我们将获得先前初始化的值。

[ -z $b ] ; b = 10
[ -z $b ] ; b = 15

即使第一个命令的退出状态是 1,即 b 已经存在,第二个命令也将被执行并且 b 将再次用新值初始化。

;和 && 运算符

示例 2:

[ -f a.txt ] && echo "file exists"

只有当前目录中存在文件时才会显示“文件存在”。当第一个命令返回 0 时,即文件存在,那么只会执行下一个命令,否则不会显示任何内容。

[ -f a.txt ] ; echo "file exists"

“文件存在”将始终显示。它与第一个命令的退出状态无关。

;和 && 运算符

只有在 &&运算符的情况下使用 touch 命令创建文件时才会显示文件存在。但是即使在使用 rm 命令删除文件后,我们使用时也会显示文件存在;运算符