Bashを読む:カンマで区切られたリストを読み込んでいますが、最後の要素がありません。

Bashを読む:カンマで区切られたリストを読み込んでいますが、最後の要素がありません。

以下のコマンドの出力が奇妙に見えます。なぜ要素5を返さないのですか?

$ echo '0,1,2,3,4,5' | while read -d, i; do echo $i; done
0
1
2
3
4

「5」も返されると予想されます。ランニングGNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)。カンマを追加すると機能しますが、入力データにカンマはありません。私は何を逃したことがありませんか?

ベストアンサー1

とともにread-d次のために使用されます終了入力ライン(つまり、入力ラインを外さないでください)。最後の「行」には終端が含まれていないため、readEOFからfalseが返され、ループが終了します(最終値を読み取っても)。

echo '0,1,2,3,4,5' | { while read -d, i; do echo "$i"; done; echo "last value=$i"; }

(使用しても、他の方法-dread使用して表示される$IFS末尾の最終値を含むスペースを吸収します。はい)\nreadarray

Bash FAQでは、この問題とさまざまな同様の状況を処理する方法について説明します。

おすすめ記事