![Bash에서 읽기 명령을 사용하여 파일을 한 줄씩 읽는 것이 작동하지 않습니다.](https://linux55.com/image/154185/Bash%EC%97%90%EC%84%9C%20%EC%9D%BD%EA%B8%B0%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%ED%95%9C%20%EC%A4%84%EC%94%A9%20%EC%9D%BD%EB%8A%94%20%EA%B2%83%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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는 인용하지 않는 한 변수의 개행 문자를 무시하기 때문입니다. 그러나 이는 상황을 지나치게 복잡하게 만듭니다.