2010-05-04 211 views

回答

3

$()在子shell中运行命令封闭,并返回其输出。前两个例子试图运行命令"ls -ltr"。既然你引述的整个命令时,shell会寻找其全名ls -ltr,不是一个名字是ls,并正在通过选项-ltr的命令。第三个示例运行命令ls,用参数-ltr和X获取命令的输出。由于$()被双引号括起来,因此不执行字段拆分和路径名扩展。

的差的一个例子:

$ ls 
bin 
$ echo $(echo 'b*') 
bin 
$ echo "$(echo 'b*')" 
b* 

也是SUS specification参见命令的扩展。

+0

感谢您的解释 – jhon 2010-05-04 15:50:21

+0

+1了明显的例子 – Gillfish 2014-08-07 15:50:59

-2

它可能没有继承的环境。如果没有设置路径,然后它不能找到ls程序

+0

这个问题无关与环境或路径。 jamessan的回答是正确的,因为它与引用规则,参数扩展和命令替换有关。 – jabbie 2010-05-04 15:48:13