간단히 말해서 프로세스 대체(예: $(somecommand) )

간단히 말해서 프로세스 대체(예: $(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

여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다. 차이점은 무엇입니까?

답변1

이 구성은 서브쉘에서 $(stuff)실행된 결과로 대체 됩니다. stuff그래서:

echo $(echo hello)

될 것입니다

echo hello

그래서,

eval "$(ls)"

실행되고 ls, 출력을 얻고, 해당 출력을 인수로 사용합니다 eval.

관련 정보