回答:
するために使用される終了(すなわちない別個の入力ラインに)入力ラインを。最後の「行」にはターミネータが含まれていないため、EOFでfalseを返し、ループは終了します(最終値が読み取られた場合でも)。read
-d
read
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では、これと、さまざまな類似のケースを処理する方法について説明しています。
男から:
-d delim
delimの最初の文字は、改行ではなく入力行の終了に使用されます。
エレメント5には区切り文字(コンマ)がないため、読み取られません。
あなたが見ているものは同じ動作です(そして同じ理由で) なぜこの「while」ループが最後の行を認識しないの。
その場合と同様に、次のように、ループ終了条件に追加のテストを追加することで動作を変更できます。
while read -d, i || [[ -n $i ]]; do ...
例
$ echo '0,1,2,3,4,5' | while read -d, i || [[ -n $i ]]; do echo $i; done
0
1
2
3
4
5
read -d, i || [[ -n $i ]]
ラどういうwhile read -r line || [[ -n $line ]]
意味ですか?