考虑:

gndlp@ubuntu:~$ test -x examples.desktop  && echo $?
gndlp@ubuntu:~$ test -x examples.desktop  & echo $?
[1] 2992
0

为什么 Bash 在这种情况下会这样做?

测试命令是否根本没有完成,因此echo命令未处理?

答案

的含义&&&有着本质上的不同。

  • What is && in Bash? 在 Bash 以及许多其他编程语言中&&意思是"和"。&&在这种情况下应按顺序运行。
  • What is & in Bash? 还有一个单&表示前面的命令 - 紧邻的左侧&—应该简单地在后台运行。

所以看看你的例子:

gndlp@ubuntu:~$ test -x examples.desktop  && echo $?
gndlp@ubuntu:~$ test -x examples.desktop  & echo $?
[1] 2992
0

第一个命令(按照其结构)实际上不返回任何内容。[1] 2992其中2992指的是后台运行的进程ID (PID)0是第一个命令的输出。

由于第二个命令刚刚运行test -x examples.desktop在后台,它发生得非常快,因此进程 ID 会生成并立即消失。

来自: stackoverflow.com