以下のコマンドの出力が奇妙に見えます。なぜ要素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
次のために使用されます終了入力ライン(つまり、入力ラインを外さないでください)。最後の「行」には終端が含まれていないため、read
EOFからfalseが返され、ループが終了します(最終値を読み取っても)。
echo '0,1,2,3,4,5' | { while read -d, i; do echo "$i"; done; echo "last value=$i"; }
(使用しても、他の方法-d
をread
使用して表示される$IFS
末尾の最終値を含むスペースを吸収します。はい)\n
readarray
Bash FAQでは、この問題とさまざまな同様の状況を処理する方法について説明します。