cat "$@"
표준 입력 중 하나에서 데이터를 읽으려고 할 때또는파일을 보면파이프 및 프로세스 대체는 누락된 후행 개행을 다르게 처리합니다.:
printf %s foo > test.txt
unset REPLY
while read
do
:
done < <(cat test.txt)
echo "$REPLY" # Prints foo
unset REPLY
cat test.txt | while read
do
:
done
echo "$REPLY" # Prints nothing!
이것은 의도적으로 설계된 것입니까? 이 "기능"이 어디에나 문서화되어 있나요?
오! @fered는 올바른 생각을 가지고 있습니다. 이는 변수 값이 어떻게 손실될 수 있는지에 대한 또 다른 예일 뿐입니다.파이프된 명령은 서브셸에서 실행됩니다..
답변1
파이프의 변수는 파이프를 활성 상태로 두지 않습니다. :)
프로세스 대체는 데이터를 파일 설명자로 리디렉션합니다. 이면의 프로세스는 파이프라인과 다릅니다 |
. 다음은 모두 동일한 파이프 내에 있기 때문에 작동합니다.
unset REPLY
cat test.txt | {
while read ;do : ;done
echo "$REPLY"
} # Prints foo!