(2020-05-18 初稿 - 2020-08-18 転記・追記)
bashでファイルから一行ずつ読み込んで処理するスクリプトを作っていて、最後の行が読み込まれない現象がありました。
どうも、読み込むファイルの最後の行に改行がない場合に、読み込まれないようです。
今まで Linux や Raspberry Pi では、vimばかり使っていたので気が付かなかった(Vimは、最後に改行を付けてくれるらしい。)
Webで検索して、対策があったので、ここにメモを残します。
以下のようなファイル(test.txt)があるとします。
最後の行が改行がなくファイルの終わりになっている点に注意してください。
【test.txt】
1abcdef
2abcdef
3abcdef
4abcdef(ファイルの終わり:EOF)
上記ファイルを、以下のスクリプトで読み込むと4行目が表示されません。^^;
while read line;
do
echo $line
done < test.txt
こんなときは、以下のようにすると4行目も読み込まれます。
while read line || [ -n "$line" ]; # 行に何か文字があったら
do
echo $line
done < test.txt
意外に気が付かずに過ごしてしまいそうなミスだと思います。
実のところ、筆者もかなり気づくのに時間が掛かりました。
今後もミスを犯しやすいところは、備忘録としてメモを残して行こうと思ってます。