在 bash 中两个与号和一个分号的操作方式有什么区别?

在 bash 中两个与号和一个分号的操作方式有什么区别?

如果我想在一行上运行两个单独的命令,我可以这样做:

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"

相关内容