ksh单引号vs双引号

时间:2010-05-04 15:13:45

标签: quotes ksh

我正在学习ksh,我正在尝试使用子shell运行命令,但是我得到了不同的结果,我猜测原因。

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

感谢

2 个答案:

答案 0 :(得分:3)

$()在子shell中运行随附的命令并返回其输出。您的前两个示例是尝试运行命令"ls -ltr"。由于您引用了整个命令,因此shell将查找名称为ls -ltr的命令,而不是名称为ls并且正在传递选项-ltr的命令。第三个示例运行命令ls,参数-ltr,X获取该命令的输出。由于$()被双引号括起来,因此不执行字段拆分和路径名扩展。

差异的一个例子:

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

另请参阅SUS specification命令扩展。

答案 1 :(得分:-2)

它可能没有继承环境。如果未设置路径,则无法找到ls程序