在 Mac 上主目录的 shell 上,我运行以下命令
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
我不清楚这里发生了什么。有什么不同?
答案1
该构造将用在子 shell 中$(stuff)
运行的结果替换自身。stuff
所以:
echo $(echo hello)
会变成
echo hello
所以,
eval "$(ls)"
将运行ls
,获取其输出,并将该输出用作 的参数eval
。