的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参见命令的扩展。
答
它可能没有继承的环境。如果没有设置路径,然后它不能找到ls程序
+0
这个问题无关与环境或路径。 jamessan的回答是正确的,因为它与引用规则,参数扩展和命令替换有关。 – jabbie 2010-05-04 15:48:13
感谢您的解释 – jhon 2010-05-04 15:50:21
+1了明显的例子 – Gillfish 2014-08-07 15:50:59