Echo는 zsh의 하위 쉘에서 발생합니다.

Echo는 zsh의 하위 쉘에서 발생합니다.

zsh에서는 다음 두 명령의 결과가 다릅니다.

a=$(</etc/hosts) && echo $a
echo $(</etc/hosts)

첫 번째는 내용을 한 줄씩 인쇄하고, 두 번째는 전체 내용을 한 줄에 인쇄합니다.

나는 이것이 서브셸이 메인 프로세스에 한 줄씩 결과를 반환하기 때문이라고 추측 echo하지만 이를 확인할 수는 없습니다.

누군가 이 문제를 해결하도록 도와줄 수 있나요?

답변1

zsh에서는따옴표가 없는 변수는 자동으로 분할되지 않고 전역적으로 사용됩니다., 하지만따옴표가 없는 명령 대체는 분할됩니다.의 값을 사용하여 단어로 변환합니다 IFS.

귀하의 경우 첫 번째 명령은 파일의 내용을 /etc/hosts변수에 저장 a하고 분할하지 않고 변수의 값을 echo $a인쇄하며 전체적으로 내용을 얻습니다 (a/etc/hosts변수 할당의 RHS에서는 분할 및 glob이 실행되지 않습니다.).

echo $(</etc/hosts)따옴표 없이 명령 대체를 사용하면 결과가 단어로 분할되므로 /etc/hosts공백으로 구분된 모든 단어의 내용을 얻을 수 있습니다.

관련 정보