-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<<<
>>><<<
IFS
设置的一部分,换句话说它是一个分隔符。我没有看到任何不一致之处。 - cdarke' \r\n'
。 - cdarke