(Bash 4.4 및 5.0 사용)
공백, 개행 및 백슬래시가 포함된 파일 이름에 문제가 있습니다. 나는 종종 다음과 같은 코드를 사용하라는 조언을 읽습니다.
oldIFS=$IFS
IFS=
while read -rd '' LINE ; do
...
또는
while IFS= read -rd '' LINE ; do
...
그러나 이 경우에는 IFS 변수를 사용할 필요가 없다는 것을 알았습니다. 분명히 다음과 같은 경우입니다.
다음 파일이 포함된 디렉터리가 있습니다.
$ ls -a1
.
..
he\llo
hello?w o r l d
listing
이것? 네 번째는 개행 문자를 나타냅니다. 문서체크리스트출력을 생성하는 스크립트는 다음과 같습니다.
$ cat listing
#!/bin/bash
#IFS=
i=0
while read -rd '' FILE; do
(( i++ ))
echo -n $i" "
ls -ld "$FILE"
done
지금 사용-print0 | /목록이 출력을 주세요."
$ find -print0 | ./listing
1 drwxr-xr-x 2 pi pi 4096 Feb 15 16:34 .
2 -rw-r--r-- 1 pi pi 6 Feb 15 06:12 ./hello?w o r l d
3 -rw-r--r-- 1 pi pi 6 Feb 15 05:30 ./he\llo
4 -rwxr--r-- 1 pi pi 99 Feb 15 16:34 ./listing
정말 괜찮습니다. 스크립트에서 IFS 앞의 #을 제거하면 결과는 동일합니다.체크리스트.
따라서 여기서는 IFS를 수정할 필요가 없을 것 같습니다.
제가 각도를 놓쳤나요? 어떤 상황에서 IFS=가 필요합니까?