While을 사용하지 않고, null문자를 구분자로 사용하기

[code:g126nzzh]exec < <(find "$1" -depth -print0)
for((;;)); do
IFS=$‘\0’ read -r -d $‘\0’ i || break
ls+=( "$i" )
done[/code:g126nzzh]
이렇게 하시면 됩니다.

exec <는 파일의 내용을 표준입력으로 재지향시켜 줍니다.
<(…)는 서브프로세서 치환이라는 bash shell으로 기능으로, 이 안의 작업 내용은 파일경로로 치환되어집니다.
find … -print0는 null값으로 파일 내용을 출력하기 위한 명령입니다.
for((;;))는 bash에서 지원하는 c style문법입니다. 이중소괄호 내에 c언어에서 사용하던것과 같은 방식으로 code를 입력하시면 됩니다. ((;;))는 초기값, 비교값, 증가값을 모두 비워둔 상태로서, 중지 지점이 존재하지 않아, for문 자체적으로 중단되지 않고 무한히 내부의 명령이 반복됩니다.
IFS=$‘\0’ read … ‘$\0’ i는 널값을 구분자로 사용하며, 널값 마다 끊어서 변수 i에 저장한다는 의미입니다.
|| break는 만약 아무런 값도 들어오지 않게 된다면 루프문을 중단시킵니다.
ls+=…는 해당 입력된 값을 배열로 저장하기 위한 문장입니다.

이렇게 하면, 쉽고 간단하게(?) 널값을 구분자로 활용할수 있습니다. 또한, 위와 같이 활용하면 서브프로세서에 값을 공유하기 위해 복잡하고 비효율적인 코드를 사용하지 않아도 되며, 코드를 독립적 모듈로 만들어 사용할수 있습니다.

[code:mbxlnlxx]for((;;)); do
....
done < <(find ... -print0)[/code:mbxlnlxx]
와 같은 형식으로 코드 블럭을 재지향하여 사용해도 됩니다.