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
공백으로 구분된 모든 단어의 내용을 얻을 수 있습니다.