【发布时间】:2012-04-18 12:58:55
【问题描述】:
我想遍历 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 似乎认为this is impossible in bash。
无赖。嗯,理论上是可以用其他字符的,比如:(毕竟$PATH也是用这种格式的):
IFS=$':'
FILES=$(find . -print0 | xargs -0 printf "%s:")
for FILE in $FILES; do echo $FILE; done
(输出略有不同,但足够公平。)
但是,我不禁觉得这很笨拙,应该有更直接的方式来做到这一点。 我正在寻找一种更直接的方法来完成此操作,最好使用通配符或ls。
【问题讨论】:
标签: bash loops whitespace filenames