문제점: 반복문이 줄바꿈을 기준으로 반복하지 않고, 줄바꿈까지 한 줄로 취급됨

파일을 관리하려고 반복문을 사용하려고 하였습니다.

find를 통해서 파일 목록을 가져오고, 해당 파일들에 대하여 복사 및 권한 등의 관리를 하려고 합니다.

먼저 find를 통해 파일 목록을 가져오고

$ lists=`find . -type f`
$ echo $lists
./a/a
./b/b
./d/d

for 문을 사용하여 각 파일에 대해 명령을 수행합니다.

$ for i in "$lists"; do echo $i; echo 1; done

저는 다음과 같은 결과를 예상하였습니다.

./a/a
1
./b/b
1
./d/d
1

이 글을 쓴 시점에서 예상하셨겠지만, 다르게 출력 되었습니다.

출력은 다음과 같았습니다.

./a/a
./b/b
./d/d
1

결과를 보면 echo $i에서 ./a/a가 수행된 것이 아니라

./a/a
./b/b
./d/d

가 수행 된 것을 알 수 있습니다.

반복문을 단 한번만 순환하였습니다.

해결책: for 대신 while 문 사용.

for 문 대신 while 문으로 할 수 있습니다.

$ lists=`find . -type f`
$ while read -r i; do echo "$i" echo 1; done <<< "$lists"
./a/a 1
./a/a a 1
./b/b 1
./test.sh 1
./d/d 1

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


Ads Blocker Image Powered by Code Help Pro

광고 차단 감지됨!

닫기를 누르면 이용하실 수 있지만, 광고 차단은 해제해주시면 좋겠습니다.
Powered By
100% Free SEO Tools - Tool Kits PRO