使用 && 而不是 ; 的原因是什么?将命令放在同一行?

pfe*_*fep 30 command-line

既不是 Linux 也不是 Unix 的专家我想知道这两种在同一行上串 2 个命令的方法有什么区别?在这个简单的例子中,我看不出输出有什么不同

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)

这没有造成任何问题 - 我只是好奇..

azi*_*mut 43

&&是一个逻辑“与”。第一个参数被评估,第二个参数只有在第一个返回 true 时才被评估。原因是“false AND something”总是错误的,所以在这种情况下不需要评估第二个参数。

因此&&,如果第一个命令报告错误(true由退出代码0表示,表示没有错误),请确保不执行第二个命令。相反,;无论第一个命令的结果如何,都执行这两个命令。

结论:链接命令&&是一个好习惯。相反,;如果出现问题,它不会执行后续命令。


pho*_*bos 26

;

顺序执行命令,不管之前的退出状态是什么:

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command
Run Code Online (Sandbox Code Playgroud)

&&

逻辑与

执行下一条命令,但前提是上一条命令成功(退出状态为0):

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#
Run Code Online (Sandbox Code Playgroud)

||

逻辑或

执行下一个命令,但前提是上一个命令失败(退出状态不是 0):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command
Run Code Online (Sandbox Code Playgroud)

  • 此外,在这些示例中,`sh -c "exit 0"` 可以替换为 `true`,而 `sh -c "exit 1"` 可以替换为 `false`。 (6认同)