http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_04
的POSIX標準的貝說,在第2.6.3:
Command substitution allows the output of a command to be substituted in place of the command name itself
這似乎意味着它只能保證正常工作,如果你代替整個命令名稱;如果你替換它的一部分或其他東西,那麼它可能會或可能不會工作。
進行實驗:
$ echo ;
$ $(echo echo) ;
$
到目前爲止好...
$ e$(echo cho) ;
$ echo $(echo ';')
;
$ echo $(echo foobar)
foobar
上面的第一個和第三個例子似乎是 「工作」,但第二個 「不工作」。這一切都只是無證和隨機的行爲,正如標準似乎暗示的那樣,實際上對於其他一些POSIX shell而言,這三者中沒有一個能保證「工作」?
(通過「工作」,我的意思是「產生相同的結果,如果替換的結果在終端上的命令本身進行分型」)
在第二個和第三個例子中,命令是'echo',而不是命令替換的結果。只有echo命令的參數是命令替換的結果。這是你的意圖嗎? – John1024
是的;並按照標準,這是不能保證工作,是嗎?我的意思是,「工作」產生的結果與在命令本身中簡單鍵入替換結果相同。 –
你打算寫'$(echo foobar)'代替'echo $(echo foobar)'嗎? – John1024