[Bash] while read でファイルを1行ずつ処理する
作成日: 2026年10月03日
while と read を組み合わせると、Bash でファイルを1行ずつ読み込んで処理できます。
例えば、fruits.txt の内容を下記とします。
apple
orange
banana
各行の先頭に fruit= を付けて出力するには、下記のように実行します。
while IFS= read -r line; do
printf 'fruit=%s\n' "$line"
done < fruits.txt
実行結果は下記のとおりです。
fruit=apple
fruit=orange
fruit=banana
IFS は Internal Field Separator の略で、Bash が文字列を単語やフィールドに分割するときに区切り文字として使う特殊変数です。標準ではスペース、タブ、改行などが区切り文字として扱われます。
IFS= のように空の値を指定してから read を実行すると、行頭・行末の空白を区切り文字として削除せず、そのまま読み込めます。
read -r の -r オプションを付けると、バックスラッシュをエスケープ文字として扱わず、そのまま読み込みます。
done < fruits.txt でファイルを while ループの標準入力に渡しています。
ファイル全体を配列として読み込みたい場合は、mapfile を使用する方法もあります。
参考
- Bash Reference Manual - Bourne Shell Builtins: https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html