공백과 개행이 포함된 IFS 변수 및 파일 이름

공백과 개행이 포함된 IFS 변수 및 파일 이름

(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=가 필요합니까?

관련 정보