[email protected]:~$ test -x examples.desktop && echo $?
[email protected]:~$ test -x examples.desktop & echo $?
[1] 2992
0
bash为什么在这种情况下采取行动?测试命令是否完成并因此不处理回显命令?&& vs&带有bash中的测试命令
[email protected]:~$ test -x examples.desktop && echo $?
[email protected]:~$ test -x examples.desktop & echo $?
[1] 2992
0
bash为什么在这种情况下采取行动?测试命令是否完成并因此不处理回显命令?&& vs&带有bash中的测试命令
&&
和&
的含义在本质上是不同的。
&&
在bash
?在bash
和其他许多编程语言中,&&
表示“AND”。在这样的命令执行上下文中,这意味着在这种情况下应该按顺序运行&&
左侧和右侧的项。&
在bash
?而单个&
意味着前面的命令(即&
的左侧)只能在后台运行。所以在看你的例子:
[email protected]:~$ test -x examples.desktop && echo $?
[email protected]:~$ test -x examples.desktop & echo $?
[1] 2992
0
的第一个命令,因为它的结构,实际上不返回任何东西。但是第二个命令返回一个[1] 2992
,其中2992
是指在后台运行的进程ID(PID),而0
是第一个命令的输出。
由于第二个命令在后台刚刚运行test -x examples.desktop
,它发生得非常快,所以进程标识生成并立即变得相当漂亮。
&
在后台执行一个命令,并且不管状态如何都会返回0。
如果一个命令是由操作者控制终止&,壳中在子shell后台执行该命令。 shell不会等待命令完成,并且返回状态为0.由a分隔的命令;按顺序执行; shell等待每个命令依次终止。返回状态是执行的最后一个命令的退出状态。
看看你的命令是什么:
$ test -x examples.desktop && echo $?
这意味着检查,看是否examples.desktop
是可执行的,如果是则执行echo $?
$ test -x examples.desktop & echo $?
手段检查,看看是否examples.desktop
是可执行文件并在“后台”中运行,然后执行echo $?
你确实不解释你期望的行为。这件事令人惊讶呢?为什么会令人惊讶?它与什么期望相矛盾? – 2014-11-06 03:58:36