我想知道
之间有什么区别"echo 'hello'; ls"
和
"echo 'hello' && ls"
是?他们都做同样的事情
答案 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
。
exit(0)
的东西,因此返回0作为返回代码($?
shell变量告诉您最后执行的命令的返回状态)。
答案 2 :(得分:8)
所以这里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
将始终执行。