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
ここで何が起こっているのか分かりません。違いは何ですか?
答え1
この構成は、サブシェルで$(stuff)
実行された結果に置き換えられます。stuff
だから:
echo $(echo hello)
なります
echo hello
だから、
eval "$(ls)"
実行されls
、出力を取得し、その出力を引数として使用しますeval
。