Bash でファイルのリストを繰り返し処理し、何らかのアクションを実行したいと考えています。問題: ファイル名に空白が含まれている可能性があるため、ワイルドカードまたはls
:
touch a\ b
FILES=* # or $(ls)
for FILE in $FILES; do echo $FILE; done
収量
a
b
これを処理する従来の方法は、find … -print0
代わりに使用することです。ただし、これは と組み合わせてのみ (うまく) 機能しxargs -0
、Bash 変数/ループでは機能しません。
私の考えは、$IFS
これを機能させるためにヌル文字に設定することでした。しかし、comp.unix.shell は、これは bash では不可能であると考えているようです。
残念。理論的には、次のような別の文字を使用することも可能です:
(結局のところ、$PATH
この形式も使用します)。
IFS=$':'
FILES=$(find . -print0 | xargs -0 printf "%s:")
for FILE in $FILES; do echo $FILE; done
(出力はわずかに異なりますが、十分です。)
しかし、これは不器用で、もっと直接的な方法があるべきだと感じずにはいられません。これを達成するためのより直接的な方法を探しています。できればワイルドカードまたはls
.