我不是 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