나는 노력하고있다while read
통사론내가 이해하지 못하는 것이 있습니다.
문제를 재현하는 가장 기본적인 시나리오는 다음과 같습니다. bash 스크립트는 a.sh
다른 스크립트를 호출 b.sh
하고 해당 스크립트가 에코하는 줄을 표시합니다.
a.sh
#!/bin/bash while read line; do echo "<<$line>>" done <<< `./b.sh`
b.sh
#!/bin/bash echo "Hello" echo "World"
실행하면 b.sh
예상되는 결과가 나타납니다.
Hello
World
반면에 을 실행하면 a.sh
출력은 다음과 같습니다.
<<Hello World>>
나는 그것이 다음과 같을 것으로 예상했지만
<<Hello>>
<<World>>
내가 뭘 잘못했나요?
답변1
~에서4.4-알파와 4.4-베타 사이의 Bash 변경 로그:
[...]
이 문서에서는 bash-4.4-beta 버전과 bash-4.4-alpha 이전 버전 간의 변경 사항을 자세히 설명합니다.
[...]
지. 문서에서 계속해서 말하듯이 Bash는 더 이상 여기에서 문자열 확장을 분할하지 않습니다.
이것은 나에게 다소 모호하지만 bash
당시 소스 코드에 어떤 변경이 이루어졌든 다음과 같은 영향을 미쳤을 것입니다. Bash 4.4에서 다음 명령은 다음과 같습니다.
while read line; do
printf '<<%s>>\n' "$line"
done <<< $( printf '%s\n' hello world )
생산할 것이다
<<hello>>
<<world>>
아니요
<<hello world>>
Bash 4.3에서 볼 수 있듯이.