【bash】while read lineの使い方を解説します

シェル/bash

bashのwhile read lineについて調べる人

bashのwhile read lineについて調べる人
「bashでwhile read lineを使うと1行ずつ入力を読み込めて便利だったと思うのですが、書き方を忘れました。正しい書き方はどのようにすればいいでしょう?コピペで利用可能な例が見たいです。」

こんな疑問を解決します。

本記事の内容

  • 1.bashにおけるwhile read lineの使い方
  • 2.外部ファイルを読み込まずに使う方法
  • 3.for文で代替する方法

この記事を書いている私はIT業界歴12年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやCygwin、mac、Linuxなど様々な環境でbashによるスクリプティングを行ってきました。

bashは極めて簡単なプログラミング言語ですが、空白の有無などで構文エラーとなること、javaなど一般的なプログラミング言語に慣れている方にとっては直感的ではない構文であることから、忘れてしまうことも多いかと思います。そのため、bashのwhile read lineについて記事にしました。

本記事では、細かい構文に迷ったら、例からコピー&ペーストして使えることを目指しました。少しでもお役に立てますと幸いです。

【朗報】フリーランスに興味のあるLinuxエンジニアの方へ


Linuxエンジニアとしてフリーランスの高額案件を探している方へ
フリーランス案件を受注するなら、平均年収819万円を誇るエミリーエンジニアが
おすすめです。bashで文字列連結の仕方を調べるエンジニアのための案件紹介

【3つのポイント】

  • ①フリーランス案件に興味のある方や初めて受注を目指す方も歓迎です
  • ②初心者向けに税務などのアドバイスも受けられます
  • ③利用料は一切かかりません

それでは、本題に戻ります。

1.bashにおけるwhile read lineの使い方

bashにおけるwhile read lineの使い方

while read lineの最も基本的な構文は以下の通りです

while read lineのうちlineは変数名なので実はどんな変数名でもOKです。

while read 《変数名》
do
《コマンド》
done < 《ファイル名》

具体例

例:os.txtから一行ずつ読み込んだ文字列を出力する

以下のように、一行ずつ読み込む対象のテキストを別途用意します。

実行結果は以下の通りです。

2.外部ファイルを読み込まずに使う方法

外部ファイルを読み込まずに使う方法

while read lineを使う場合、以下の構文を用いると外部ファイルを読み込まずに使うことができます。

while read line
do
《コマンド》
done < 《キーワード》
《テキスト》
《キーワード》

《キーワード》はEOFENDなど何でもOKでして、読み込むテキストの開始と終了を判定するものです。

具体例

例:一行ずつ読み込んだ文字列を出力する

この場合でも、実行結果は同じです。

別の書き方

個人的にEOFENDが好きではありません。その場合、以下のようにも記述できます。

echo ‘《テキスト》’ | while read line
do
《コマンド》
done

シングルクォートは、《テキスト》を改行するために必須です。テキストが次の行に続いているよ、というのを表現しています。

具体例

例:echoで一行ずつ読み込んだ文字列を出力する

この場合でも、実行結果は同じです。

3.for文で代替する方法

for文で代替する方法

物覚えの悪い私は、あまりwhile read lineを使いません。多くの場合、for文で表現できるからです。

for 《変数名》 in `cat 《ファイル名》`
do
《コマンド》
done

具体例

例:for文での代替例

この場合でも、実行結果は同じです。

for文で代替できないケース

各行に空白を含む場合、for文ですと改行だけでなく空白でも区切られてしまうのでwhile read lineを使った方が便利です。

for文を使うとこうなってしまいます。