bash는 변수에서 선행 공백을 제거하고 있습니다.

bash는 변수에서 선행 공백을 제거하고 있습니다.

저는 bash를 처음 사용합니다(지금까지는 ksh만 사용했습니다). 변수의 공백 문제로 어려움을 겪고 있습니다. 나는 bash의 선행 공백 처리에 대한 많은 게시물을 읽었지만 내 예에서 이를 수정하는 방법을 잘 모르겠습니다.

echo "No space"         > x.tmp
echo "     Some space" >> x.tmp
cat x.tmp
cat x.tmp | while read line
do
   echo "$line" >> y.tmp
done
cat y.tmp

산출:

No space
     Some space
No space
Some space

공백을 보존하려면 어떻게 해야 합니까?

감사해요.

답변1

당신은 할 필요가

while IFS= read -r line

IFS를 빈 문자열로 설정하면 공백이 보존됩니다.
를 사용하면 -r텍스트의 백슬래시 시퀀스가 ​​유지됩니다.


성능이 문제인 경우 while read루프가 다음과 같습니다.매우배쉬가 느립니다. 입력을 행에 저장하고 메모리 소비가 문제가 되지 않는 경우 입력을 행 배열로 읽습니다.

mapfile -t lines < x.tmp
for line in "${lines[@]}"; do
    do_something_with "$line"
done

관련 정보