Замена процесса (например, $ (somecommand)) В двух словах

В моей оболочке из домашнего каталога на Mac я запускаю следующее eval "ls" , и это просто показывает мне каталоги. Но если я запускаю

eval "$ (ls)" , я получаю следующий результат:

    zsh: command not found: Applications
zsh: command not found: Desktop
zsh: command not found: Development
zsh: command not found: Development.zip
zsh: command not found: Documents
zsh: command not found: Downloads
zsh: command not found: Dropbox
zsh: command not found: Library
zsh: command not found: Movies
zsh: command not found: Music
zsh: command not found: Pictures
zsh: command not found: Public

Я не понимаю, что здесь происходит. В чем разница?

0
07.01.2017, 04:39
1 ответ

Конструкция $ (stuff) заменяет себя результатами выполнения stuff в подоболочке. Итак:

echo $(echo hello)

превратится в

echo hello

Следовательно,

eval "$(ls)"

запустит ls , возьмет его вывод и использует этот вывод в качестве аргумента для eval .

2
28.01.2020, 02:34

Теги

Похожие вопросы