我正在学习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-
感谢
答案 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程序