为什么“read”没有获取我所有的变量?

为什么“read”没有获取我所有的变量?

为什么下面不打印 3 2 1 6 5 4?

echo '1 2 3 4 5 6' | while read a b c; do echo result: $c b a; done

那岂不是先按顺序读前三个数字,反向打印,然后再读后三个数字,再反向打印?

答案1

您提供了一行包含 6 个“单词”的内容,但您将它们读入三个变量:a、b 和 c。第一个变量 a 被赋值为 1,第二个变量 b 被赋值为 2,c 保存该行的其余部分:“3 4 5 6”。

输出是3 4 5 6 b a因为你没有写$c $b $a,而只写了$c b a

如果你写了$c $b $a,结果就会是3 4 5 6 2 1

答案2

令您困惑的关键点,其他答案略过,可以在bash 手册页:

read …(选项)… [name ...]

    从标准输入读取一行,…,第一个单词被分配给第一个姓名,第二个词到第二个词姓名,依此类推,剩余的单词及其中间分隔符分配给最后一个姓名…         [重点补充。]

或在输出中help read

…(选项)…[姓名...]

    从标准输入读取一行并将其分成字段。

    单行从标准输入,……与单词拆分一样,该行被拆分为多个字段,第一个单词分配给第一个 NAME,第二个单词分配给第二个 NAME,依此类推,所有剩余单词分配给最后一个 NAME。 ……

要点:read永远不要读超过一行。

相关内容