逻辑AND运算符(&
&
):
仅当第一个命令成功执行(即其退出状态为零)时, 第二个命令才会执行。该运算符可用于检查第一个命令是否已成功执行。这是命令行中最常用的命令之一。
语法如下:
command1 &
&
command2
如果command1成功执行, 则command2将执行。此运算符使我们可以检查command1的退出状态。
分号运算符(; ):
【& & 和; 之间的区别-Linux中的链接运算符】它用于一次执行多个命令。使用此运算符可以将多个命令链接在一起。无论此操作符的退出状态如何, 始终在该操作符之后的命令执行之后始终执行该操作符。这些命令始终按顺序执行。由分号运算符分隔的命令是按顺序执行的, shell等待每个命令依次终止。返回状态是最后执行的命令的退出状态。
语法如下:
command1 ;
command2
第二条命令的执行与第一条命令的退出状态无关。如果第一个命令未成功执行, 则第二个命令也将执行。
AND(& & )和SEMI-COLON(; )运算符之间的区别:
&
&
(逻辑AND)运算符 |
;
(分号)运算符 |
---|---|
第二条命令的执行取决于第一条命令的执行 | 第二命令的执行独立于第一命令的执行状态。 |
如果前一条命令的退出状态为非零, 则将不执行后一条命令。 | 即使第一个命令的退出状态为非零, 第二个命令也将被执行。 |
允许条件执行 | 不允许条件执行。 |
Bash短路了逻辑AND的评估。 | 无需短路评估。 |
逻辑AND具有更高的优先级。 | 它的优先级低于逻辑与。 |
[ -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命令删除文件后, 使用时仍会显示文件存在;算子
推荐阅读
- C#中的类和结构之间有什么区别()
- C语言和Objective-C有什么区别()
- C语言和C#之间有什么区别()
- Java中抽象类和接口之间的区别
- C#中抽象类和接口之间的区别
- 算法-差异数组(O(1)时间范围更新查询)
- 32位和64位操作系统之间的区别
- AES和DES密码之间有什么区别()
- Nginx网络压缩 CSS压缩 图片压缩 JSON压缩