파이프라인 및 프로세스 교체

파이프라인 및 프로세스 교체

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!

관련 정보