我想遍历 Bash 中的文件列表并执行一些操作。问题:文件名可能包含空格,这会产生一个明显的通配符问题或ls
:
touch a\ b
FILES=* # or $(ls)
for FILE in $FILES; do echo $FILE; done
产量
a
b
现在,处理这个问题的传统方法是使用find … -print0
。但是,这只适用于(很好地)与 Bash 变量/循环一起使用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
.