;

我不是 Linux 和 Unix 方面的专家,我想知道这两种在同一行上执行两个命令的方法有什么区别?在这个简单的示例中,我看不到输出有什么区别

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

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

答案1

&&是逻辑“与”。第一个参数被求值,只有当第一个参数返回 true 时,才会求值第二个参数。原因是“false AND something”始终为 false,因此在这种情况下无需求值第二个参数。

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

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

答案2

按顺序执行命令,无论之前的退出状态是什么:

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

逻辑与

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

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

逻辑或

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

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command

相关内容