一尘不染

在Bash中使用“ test”命令将“ &&”与“&”进行对比

linux

考虑:

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

在这种情况下,为什么Bash会表现得如此?

测试命令是否只是没有完成而导致echo命令没有得到处理?


阅读 311

收藏
2020-06-03

共1个答案

一尘不染

的意义&&&本质上是不同的。

  • 什么是&&Bash中?在Bash和其他许多编程语言中,&&意思是“与”。并且在这样的命令执行上下文中,这意味着&&在这种情况下,应按顺序运行左侧和右侧的项目。
  • 什么是&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,并立即消失了。

2020-06-03