我想知道它们之间有什么区别
"echo 'hello'; ls"
Run Code Online (Sandbox Code Playgroud)
和
"echo 'hello' && ls"
Run Code Online (Sandbox Code Playgroud)
是什么?他们都做同样的事情
Hen*_*aya 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'"成功运行或不成功.
Dar*_*ust 16
这&&是逻辑AND运算符.其使用的想法command1 && command2是command2仅在command1成功时被评估/运行.所以这里ls只有在echo命令返回成功的情况下才能运行(这里总会如此,但你永远不知道;-).你也可以这样写:
if echo 'hello'
then
ls
fi
Run Code Online (Sandbox Code Playgroud)
分号只分隔两个命令.所以你也可以这样写echo 'hello' ; ls:
echo 'hello'
ls
Run Code Online (Sandbox Code Playgroud)
因此ls即使echo失败也将执行.
顺便说一句,在这种情况下成功意味着程序退出了类似的东西exit(0),因此返回0作为返回代码($?shell变量告诉你最后执行的命令的返回状态).
为了补充DarkDust的答案:
所以这里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
Run Code Online (Sandbox Code Playgroud)