シーケンスコマンドとテストの問題

シーケンスコマンドとテストの問題

私が経験したテストの問題は次のとおりです。

次のコマンドシーケンスはどの出力を生成しますか?

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

理由はわかりません。誰かが私にこれを説明できますか?

(最初は答えが「はい」だと思いました3 2 1。)

ベストアンサー1

マンページで以下を読んでください。

標準入力または-uオプションが指定されている場合は、ファイル記述子FDから行を読み取ります。単語分割と同様に、行は最初の単語が最初のNAMEに割り当てられ、2番目の単語が2番目のNAMEに割り当てられるなどのフィールドに分割され、残りのすべての単語は最後のNAMEに割り当てられます。 $ IFSの文字のみが単語区切り文字として認識されます。

このため、私は通常「ゴミ」変数を使用して、残っているすべてを収集します。

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

使用中:

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

おすすめ記事