处理几个文件的一种常见方法是-不要为此而生:
for f in $(ls); do …
现在,为了防止带有空格或其他奇怪字符的文件,一种幼稚的方法是:
find . -type f -print0 | while IFS= read -r -d '' file; …
此处-d ''是,用于将ASCII NUL设置为的缩写-d $'\0'。
但是为什么会这样呢?为什么''和$'\0'一样?是因为Bash的C根目录带有空字符串始终以空值结尾吗?
提到“天真的”方式,有没有更好的方法呢?
—
iruvar
我知道@htor
—
slhck
for i in $(ls)非常愚蠢-我在这里用它作为一个不好的例子时几乎感到ham 愧。
@ChandraRavoori是的,例如,通过使用
—
slhck
find … -exec而不是在文件周围循环,这在大多数情况下可以使用这样的for循环来工作。在这里,find为您照顾一切。
@slhck,谢谢。对于涉及每个文件的多步操作的情况,出于可读性原因,最好使用循环呢?是否有比上述“天真的方法”更好的循环选项?
—
iruvar