문제점: 반복문이 줄바꿈을 기준으로 반복하지 않고, 줄바꿈까지 한 줄로 취급됨
파일을 관리하려고 반복문을 사용하려고 하였습니다.
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
답글 남기기