Кш одиночные кавычки против двойных кавычек - PullRequest
0 голосов
/ 04 мая 2010

Я изучаю ksh, я пытаюсь запустить команду, используя подоболочку, но я получил другие результаты, я угадываю причину.

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 ]

3 голосов
/ 04 мая 2010

$() запускает вложенную команду в подоболочке и возвращает ее вывод. Ваши первые два примера пытаются запустить команду "ls -ltr". Поскольку вы указали всю команду в кавычках, оболочка будет искать команду с полным именем ls -ltr, а не с именем ls, которому передаются параметры -ltr. Третий пример запускает команду ls с аргументом -ltr, и X получает выходные данные этой команды. Поскольку $() был заключен в двойные кавычки, разделение полей и расширение пути не выполняются.

Пример разницы:

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

См. Также спецификацию SUS для расширения команд.

0 голосов
/ 04 мая 2010

Вероятно, это не наследовало окружающую среду.Если путь не указан, программа ls не может найти

...