bash 里,用 for .. in (比如 for f in `cat some/file`; do ...) 或者其它方式 (比如 xargs, cat some/file | xargs ls -l) 处理文件的时候,如果文件名有空格,经常会遇到问题,因为本来是一行一行的文件会被当成一个长字符串,而 bash 和 xargs 在处理的时候,把空格和换行都当成分割符 ($IFS, internal field separator)。
这时候可以改 $IFS。但是它的用法好像比较微妙。所以如果需求很简单,也有一些很简单的应对办法。以下举两例。
1.
for f in `cmd`; do ... 可以换成 cmd | while read f; do ...。比如,cat some/file | while read f; do echo $f; done2. xargs 可以利用 --delimiter=delim 参数,比如,
xargs -a some/file -d '\n' du -shc