Bashスクリプトの結果を理解できません

Bashスクリプトの結果を理解できません

スクリプトは次のとおりです。

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

結果は3 4 5 6 2 1です。理由を説明できる人はいますか?

答え1

read標準入力の各行を単語に分割する同じ方法シェルはコマンドを作成するときにこれを行います。以来:

最初の単語は最初の名前に割り当てられ、2番目の単語は2番目の名前に割り当てられ、残りの単語と中間区切り文字は姓に割り当てられます。

あなたの場合は、a値1を割り当て、b値2を割り当てて、c「3 4 5 6」行の残りの部分を取得します。c3 4 5 6)、次のb2)、次のa()を印刷すると、1表示される結果が得られます。

この場合、最初から移動する行は1つだけなので、ループは何もしませんecho

答え2

行の最終データは、c「3 4 5 6」を含む最後の変数に入力されます。したがって、次のことができます。

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

変数を無視しますrest

関連情報