В моей оболочке из домашнего каталога на 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
Я не понимаю, что здесь происходит. В чем разница?
Конструкция $ (stuff)
заменяет себя результатами выполнения stuff
в подоболочке. Итак:
echo $(echo hello)
превратится в
echo hello
Следовательно,
eval "$(ls)"
запустит ls
, возьмет его вывод и использует этот вывод в качестве аргумента для eval
.