为什么 read 内置中的 REPLY 变量会跳过空格?

use*_*311 5 bash read

echo "     a" | while read; do echo "$REPLY"; done
Run Code Online (Sandbox Code Playgroud)

将输出包含前导空格的“.....a”。然而,

echo "     a" | while read line; do echo "$line"; done
Run Code Online (Sandbox Code Playgroud)

将输出“a”,并跳过前导空格(好的,因为分词)。

看起来 REPLY 变量与 IFS 设置为 null 具有相同的效果:

echo "     a" | while IFS= read line; do echo "$line"; done
Run Code Online (Sandbox Code Playgroud)

从bash手册中我找不到原因。你有什么想法?谢谢。

pLu*_*umo 2

read 手册页

从标准输入(或从文件)读取一行并分配单词分配给变量名称。

如果未提供名称,则将读取的分配给变量REPLY

因此,$REPLY始终是整,而分配的变量始终是单词。否则它将无法工作,例如如果您有多个单词,那会$REPLY是什么?