Answers:
这里有两个问题。首先,您要声明变量“ i”,但使用不存在的“ $ file”。即使这样做,第二个问题是bash读取“从左到右”。这意味着它将首先看到“> $ file”,并将覆盖文件的内容。因此,如果使用正确的变量,则可能会丢失数据。
因此,一个错误使您免于另一个错误,您是幸运的,幸运的家伙:)
尝试类似的方法:
for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; donefor i in *.txt ; do fold -w 1 $i > $i".folded"; done。但是,那会使文件数量增加一倍,因此我不建议这样做。
                    sillytmpfile要在ramdisk上的路径,则可以对其进行优化。在Linux上,这通常是/tmp,/run/shm也许其他人,请与mount | grep tmpfs。
                    sed 也可能是一个选项,它在内部处理临时文件问题:
for i in *.txt ; do
  sed  -i 's#.#&\n#g' $file
donefold和sed... time printf '%sabcdef\n' {1..1000000}  |fold -w 1 >/dev/null…… 由于原始换行符的处理方式,输出也有所不同。
                    wc行计数结果:... fold (GNU coreutils)7.4 printf '%sabcdef\n' {1..1000000} |fold -w 1 |wc -l # -> 11888896 ...    GNU  sed 版本4.2.1 printf '%sabcdef\n' {1..1000000} |sed 's#.#&\n#g' |wc -l # -> 12888896
                    
sponge从moreutils包装,在文件的“就地”编辑,