Bash读取LINE与读取-n LINE

时间:2012-12-07 16:53:14

标签: bash shell

如果我在bash中读取LINE循环,从stdin读取大量输入是非常低效的,因为它根本不进行缓冲。

将在读取时使用-n 4096 LINE提供临时缓冲,允许bash更有效地执行大输入的读取吗?

2 个答案:

答案 0 :(得分:2)

没有。您可以使用以下命令验证是否一次执行了一次读取:

echo foo | strace bash -c 'read -n 100 f'

并看到单次读取需要4次系统调用。但是很容易实现你想要的。要将stdin中的4096个字节放入变量,请使用进程替换:

bash -c 'r=$( dd bs=4096 count=1 2> /dev/null); echo "$r"'

答案 1 :(得分:1)

-N(而非-n)选项将读取换行符。