Linux Bash 中的双与号(&&)和分号(;)有什么区别?
- 2024-10-28 08:37:00
- admin 原创
- 56
问题描述:
Linux Bash中的 & 号和分号有什么区别?
例如,
$ command1 && command2
对比
$ command1; command2
解决方案 1:
该&&
运算符是布尔 AND 运算符:如果左侧返回非零退出状态,则该运算符返回该状态,而不评估右侧(短路),否则评估右侧并返回其退出状态。这通常用于确保只有command2
在成功运行时才会运行command1
。
令牌;
只是分隔命令,因此无论第一个命令是否成功,它都会运行第二个命令。
解决方案 2:
命令1 && 命令2
command1 && command2
`command2当(且仅当)
command1`执行成功时执行。在 Unix 术语中,这意味着退出代码/返回代码等于零。
命令1;命令2
command1; command2
`command2依次执行后执行
command1`。命令是否成功并不重要。
解决方案 3:
前者是AND
使用短路评估的简单逻辑,后者只是简单地分隔两个命令。
实际情况是,当第一个程序返回非零退出代码时,整个过程AND
将被求值FALSE
,第二个命令将不会被执行。后者只是按顺序执行它们。
解决方案 4:
cmd1 ; cmd2
...运行cmd1然后运行cmd2。
cmd1 && cmd2
...如果 cmd1 以零代码退出,则运行 cmd2。
两者都产生最后执行的命令的状态代码。
但是,其他答案却忽略了什么......
您可能认为cmd1 && cmd2
和(cmd1 && cmd2)
是相同的。事实上,它们非常不同。如果没有括号,哪个命令会失败。
考虑以下情况。状态代码由取消注释决定set -e
#!/bin/bash
set -e # exit on error
set -x
# false # Yields status 1 and would cause the script to exit if -x is left uncommented
true && true # Does not exit script! Good
echo A $? # 0
false && true # Does not exit script! Wut?
echo B $? # 1
true && false # Exits the script. Wut? Wut?
echo C $? # 1, if not -e
(false && true) # Exits the script
echo D $? # 1, if not -e
(true && false) # Exits the script
echo E $? # 1, if not -e
D 和 E 有意义,与其他的区别也有意义 - 括号创建了一个子 shell。但是,以下两个都产生状态 1,但只有秒退出脚本,这确实很奇怪:
false && true
true && false
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD