“echo'hello'; ls”vs“echo'hello'&& ls”之间的区别?

时间:2010-08-26 09:23:33

标签: bash

我想知道

之间有什么区别
"echo 'hello'; ls"

"echo 'hello' && ls"

是?他们都做同样的事情

4 个答案:

答案 0 :(得分:22)

“echo'hello'&& ls”表示:如果“echo'hello'”成功运行,则执行“ls”。要了解什么是bash中的“成功”。试试这个:

的bash> cd /
的bash> echo $?

如果上一个命令成功运行,您应该看到0

之后,试试这个:

的bash> asdfdf
的bash> echo $?

您应该看到介于1和255之间的非零值。这意味着上一个命令未成功运行

另一方面,“echo'hello'; ls”表示执行“ls”是否“echo'hello'”成功运行。

答案 1 :(得分:16)

&&是逻辑AND运算符。在command1 && command2中使用它的想法是command2仅在command1成功时被评估/运行。所以这里只有ls命令返回成功才会运行echo(这里总会如此,但你永远不知道;-)。您也可以将其写为:

if echo 'hello'
then
  ls
fi

分号只分隔两个命令。所以你也可以把echo 'hello' ; ls写成:

echo 'hello'
ls

因此即使ls失败,也会执行echo

BTW,在这种情况下成功意味着该程序退出时使用类似exit(0)的东西,因此返回0作为返回代码($? shell变量告诉您​​最后执行的命令的返回状态)。

答案 2 :(得分:8)

补充DarkDust's answer

  

所以这里ls只会在echo命令返回成功的情况下运行(这里总会如此,但你永远不知道; - )。

嗯,并非总是如此。例如,标准输出流可能是不可写的

:; ( echo "foo" && touch /tmp/succeeded) >/dev/full
bash: echo: write error: No space left on device
:; ls -l /tmp/succeeded
ls: cannot access /tmp/succeeded: No such file or directory

答案 3 :(得分:4)

在这里,他们也这样做。

但是举一个例子:

cp file target && ls
cp file target; ls

在第一种情况下,只有ls成功时才会执行cp。 在第二种情况下,无论cp失败还是成功,ls将始终执行。