的ksh单引号VS双引号

的ksh单引号VS双引号

问题描述:

我正在学KSH,我试图运行使用一个子shell命令,但我得到了不同的结果,我猜的原因。的ksh单引号VS双引号

[email protected][/home/za] X=$("ls -ltr") 
ksh: ls -ltr: not found. 
[email protected][/home/za] X=$('ls -ltr') 
ksh: ls -ltr: not found. 
[email protected][/home/za] X="$(ls -ltr)" 
[email protected][/home/za] echo $X 
total 5256 -rw- 

感谢

$()在子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

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

+0

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