原因
whileread很慢,因为需要外壳程序对每个字节进行系统调用。它不能从管道读取较大的缓冲区,因为外壳程序不得从输入流读取多行内容,因此必须将每个字符与换行符进行比较。如果您
strace在
whileread循环上运行,您可以看到此行为。此行为是可取的,因为它可以可靠地执行以下操作:
while read size; do dd bs=$size count=1 of=file$(( i++ )); done
其中循环内的命令从外壳程序读取的同一流中读取。如果外壳程序通过读取大缓冲区消耗了大量数据,则内部命令将无法访问该数据。不幸的副作用是,
read它的运行速度太慢了。



