「読み取り」がすべての変数を取得できないのはなぜですか?

「読み取り」がすべての変数を取得できないのはなぜですか?

次はなぜ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

最初の3つの数字を順番に読んで逆順に印刷し、最後の3つの数字を読んで逆順に印刷する方が良いでしょうか。

答え1

6つの「単語」を含む行を提供し、それを3つの変数(a、b、c)で読み込みます。最初の変数aには値1が割り当てられ、2番目の変数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

混乱する重要な点は、他の回答からスキップし、以下にあります。バッシュのマニュアルページ:

read … (オプション)… [name ...]

    標準入力から1行読みます。...、最初の単語が最初の単語に割り当てられます。名前、第2ワードから第2ワードへ名前、残りの単語と中間区切り文字が最後の単語に割り当てられます。名前…         [ハイライトが追加されました。 ]

または出力からhelp read

読む… (オプション)…[名前...]

    標準入力から1行読みますフィールドに分割します。

    読む一つの線標準入力では、...単語の分割と同様に、行は最初の単語が最初のNAMEに割り当てられ、2番目の単語が2番目のNAMEに割り当てられるなどのフィールドに分割され、残りのすべての単語は最後のA NAMEに割り当てられます。 …

重要な内容:read1行以上を読んではいけません。

関連情報