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