スペースと改行を含む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

これ? 4番目は改行文字を表します。文書チェックリスト出力を生成するスクリプトは次のとおりです。

$ 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 =が必要ですか?

ベストアンサー1

おすすめ記事