根据手册页中的“read -N”描述:
-N nchars 仅在准确读取 NCHARS 字符后返回,除非遇到 EOF 或读取超时,忽略任何分隔符
但是,在回答以下命令时:
$ echo 'a b' | while read -N1 c; do echo ">>>$c<<<"; done
>>>a<<<
>>><<<
>>>b<<<
>>><<<
空格和换行符都被翻译成空字符串,而在命令中:
$ echo 'a b' | while IFS= read -N1 c; do echo ">>>$c<<<"; done
>>>a<<<
>>> <<<
>>>b<<<
>>>
<<<
空格和换行符已正确存储在变量中。
因此,分隔符在“read”或“while”命令中似乎仍有一些处理,我不明白。
我们可以将这些结果与使用“read -n”的结果进行比较,该手册描述为:
-n nchars 在读取 NCHARS 个字符后返回,而不是等待换行符,但如果在分隔符之前读取的 NCHARS 个字符少于此,则使用分隔符
$ echo 'a b' | while read -n1 c; do echo ">>>$c<<<"; done
>>>a<<<
>>><<<
>>>b<<<
>>><<<
$ echo 'a b' | while IFS= read -n1 c; do echo ">>>$c<<<"; done
>>>a<<<
>>> <<<
>>>b<<<
>>><<<