1

如果我在 bash 中执行 while read LINE 循环,则从 stdin 读取大量输入的效率非常低,因为它根本没有缓冲。

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

4

2 回答 2

2

不可以。您可以使用以下方法验证一次读取是否执行一项:

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

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

bash -c 'r=$( dd bs=4096 count=1 2> /dev/null); echo "$r"'
于 2012-12-07T17:00:08.633 回答
1

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

于 2012-12-07T17:06:40.947 回答