Cyk*_*ker 6 linux bash terminal
为了演示此问题,请在 Linux 中运行以下命令后粘贴一个长字符串(>4096 字节):
read foo && wc -c <<<"$foo"
Run Code Online (Sandbox Code Playgroud)
结果是 4096,这意味着输入被截断。
一些研究表明,有一个终端行缓冲区大小硬编码为 4096,这解释了截断。然而,当我尝试使用该选项阅读时-n,它起作用了:
read -n 32768 foo && wc -c <<<"$foo"
Run Code Online (Sandbox Code Playgroud)
结果是输入的实际长度(+1,但这是由于here-string)而不是4096。
所以我想知道这个选项有什么魔力-n 32768。我在 bash 手册页中没有找到关于此的相关信息。这是我们可以信赖的功能吗?
Sha*_*awn -1
从 bash 联机帮助页部分阅读:
-n nchars
read 在读取 nchars 个字符后返回,而不是等待完整的输入行,但如果在分隔符之前读取的字符少于 nchars 个字符,则遵循分隔符。
(我很确定这是一个 bash 特定的扩展,如果使用其他 shell,则不能依赖它,除非您验证特定的 shell 也支持它)。编辑:例如,zsh 做了一些与-n.