Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如果我在 bash 中执行 while read LINE 循环,则从 stdin 读取大量输入的效率非常低,因为它根本没有缓冲。
使用 while read -n 4096 LINE 会提供临时缓冲,允许 bash 更有效地执行大输入的读取吗?
不可以。您可以使用以下方法验证一次读取是否执行一项:
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"'
-N( 而不是)-n选项将读取换行符。
-N
-n