![bash는 변수에서 선행 공백을 제거하고 있습니다.](https://linux55.com/image/131339/bash%EB%8A%94%20%EB%B3%80%EC%88%98%EC%97%90%EC%84%9C%20%EC%84%A0%ED%96%89%20%EA%B3%B5%EB%B0%B1%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B3%A0%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 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