제목에 올바른 단어를 사용하고 있는지 확실하지 않습니다. 다음을 시도하고 있습니다.
while read line; do
echo "$line"
exit;
done; <( echo "foo\n"; exit )
while
하지만 작동이 멈춥니다. 루프가 프로세스로부터 어떤 입력도 받지 못하는 것 같습니다 echo
. 이 작업을 수행하는 올바른 방법과 이것이 잘못된 이유를 아는 사람이 있습니까?
나는 이것을 할 수 있다:
echo "foo" | while read line; do echo "$line"; done;
하지만 저는 학습 목적으로만 첫 번째 방법을 택하고 싶습니다. 프로세스 교체가 필요한지 잘 모르겠습니다.
답변1
루프 후에도 스크립트가 계속되고 ${line}
.
세미콜론을 제거하고 done
프로세스 대체 사이에 입력 리디렉션을 넣습니다.
done < <( echo "foo\n"; exit )
exit
프로세스 교체 실행을 명시적으로 종료할 필요는 없습니다 .
그러나 텍스트 파일 처리의 경우 일반적으로 sed
또는 를 사용하는 것이 더 좋고 안전 하며 awk
, 이는 또한 더 나은 성능을 제공합니다. 텍스트 줄을 처리하기 위해 정말로 Bash를 사용해야 한다면 일반적으로매우다음을 수행하는 것이 좋습니다.(루프의 첫 번째 줄만 표시됩니다)
while IFS= read -r line ; do
당신이 정말로 다른 것이 필요하다는 것을 알지 않는 한.
이는 Bash에서 각각 구분 기호 및 이스케이프 문자로 구문 분석, 압축 및 해석되는 공백, 줄 바꿈 및 백슬래시가 포함된 입력 줄의 원시 처리에 필요합니다.