[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 Shell command