gndlp@ubuntu:~$ test -x examples.desktop && echo $?
gndlp@ubuntu:~$ test -x examples.desktop & echo $?
[1] 2992
0
Run Code Online (Sandbox Code Playgroud)
为什么bash在这种情况下的行为方式呢?测试命令是否未完成,因此不处理echo命令?
Jak*_*uld 46
意义&&
和&
内在的不同.
&&
在&&
?In &&
和许多其他编程语言 - &
意味着"AND".在这样的命令执行上下文中,它意味着&
在这种情况下应该按顺序运行左侧和右侧的项目.&
在[1] 2992
?而单一2992
意味着前面的命令 - 在0
-st的左边 - 应该只在后台运行.所以看看你的例子:
gndlp@ubuntu:~$ test -x examples.desktop && echo $?
gndlp@ubuntu:~$ test -x examples.desktop & echo $?
[1] 2992
0
Run Code Online (Sandbox Code Playgroud)
第一个命令 - 因为它是结构化的 - 实际上不返回任何东西.但是第二个命令返回一个test -x examples.desktop
,其中&&
指的是在后台运行的进程ID(PID),它是&
第一个命令的输出.
由于第二个命令只是&&
在后台运行,因此它很快就会发生,因此进程ID会立即产生并且很快就会出现.
看看你的命令是什么:
test -x examples.desktop && echo $?
Run Code Online (Sandbox Code Playgroud)
这意味着检查是否examples.desktop
可执行,然后执行echo $?
。
test -x examples.desktop & echo $?
Run Code Online (Sandbox Code Playgroud)
意味着检查是否examples.desktop
可以在“后台”中执行。然后执行echo $?
。