[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