如果我想在一行上运行两个单独的命令,我可以这样做:
cd /home; ls -al
或这个:
cd /home && ls -al
我得到了相同的结果。但是,这两种方法的背后到底发生了什么?它们之间的功能区别是什么?
答案1
只是;
将一个命令与另一个命令分开。&&
表示仅在前一个命令成功后才运行以下命令
cd /home; ls -al
cd /home
即使cd
命令失败(/home
不存在、您没有权限遍历它等),它也会运行ls -al
。
cd /home && ls -al
仅当成功ls -al
时才会运行。cd /home
答案2
a && b
如果A返回零退出代码,然后b被执行。
a || b
如果A返回非零退出代码,然后b被执行。
a ; b
A然后执行b被执行。
答案3
cd /fakedir; ls -al
ls
在当前目录中运行,因为cd /fakedir
将会失败,并且 shell 将忽略非零的退出状态。
cd /fakedir && ls -al
因为&&
只有前一个命令正常退出(状态为零)时操作员才会继续,所以不会ls
执行任何操作。
还有其他操作符,例如&
将进程置于后台。虽然它通常放在命令末尾,但也可以放在链的中间。
答案4
您还可以将它们连接在一起,就像if..then..else
链接命令逻辑一样。
例子:
ls file.ext && echo "file exists" || echo "file does not exist"