Bash에서 읽기 명령을 사용하여 파일을 한 줄씩 읽는 것이 작동하지 않습니다.

Bash에서 읽기 명령을 사용하여 파일을 한 줄씩 읽는 것이 작동하지 않습니다.

text.txt이런 파일이 있어요

line1
line2
line3

각 줄을 반복하고 에코하는 스크립트를 작성하고 싶습니다.

modified line1
modified line2
modified line3

다음은 매우 일반적인 솔루션에 대한 스크립트입니다.

while IFS= read -r line; do
  echo modified $line
done <<< $(cat ~/text.txt)

그러나 내가 얻는 결과는 다음과 같습니다.

modified line1 line2 line3

무엇이 잘못되었나요?

답변1

문제는 마지막 줄에 있습니다. 변수(명령 대체)가 필요하지 않거나 파일을 이미 읽을 수 있기 cat때문입니다 . read이렇게 하면:

while IFS= read -r line; do
  echo modified $line
done < ~/text.txt

효과가있다.

또한 다음과 같이 변수를 인용하면 명령이 작동합니다.

"$(cat ~/text.txt)"

bash는 인용하지 않는 한 변수의 개행 문자를 무시하기 때문입니다. 그러나 이는 상황을 지나치게 복잡하게 만듭니다.

관련 정보