read - 標準入力から行を読み取る

形式

read [-prs] [-u[d]] [variable?prompt ] [variable …]

説明

read はオプションなしで呼び出されると、 標準入力から行を 1 行読み取り、その行を複数のフィールドに分割し、そのフィールドを順番に各 variable に割り当てます。

read は、行をどこでフィールドに分割すべきなのかを判別するために 組み込み変数 IFS (internal field separator (内部フィールド区切り) の略) を使用します。 いずれかの IFS 文字は、1 つのフィールドの終わりであり、次のフィールドの始まりを意味しています。IFS のデフォルト値は、ブランク、タブ、および改行です。

一般に、単一の IFS 文字が 1 つのフィールドの終わりと次のフィールドの始まりをマークします。例えば、IFS がコロン (:) の場合、read は入力 a::b には 3 つのフィールドがあると見なします。すなわち、a、空フィールド、および b です。しかし、IFS にブランク、タブ、またはエスケープ改行が含まれている場合、read は複数のブランク、タブ、またはエスケープ改行のシーケンスを単一のフィールド分離文字と見なします。例えば、a   b の場合、ab の間に複数のブランクがあるとしても、フィールドは 2 つです。

コマンド行の n 番目の variable には、n 番目のフィールドが割り当てられます。variable より多くの入力フィールドがある場合、まだ割り当てられていないフィールドは、すべて最後の variable に 割り当てられます。フィールドよりも多くの変数がある場合、余分の変数にはヌル・ストリング ("") が割り当てられます。

変更の始まりデフォルトでは、read オプションが指定されない場合は、バックスラッシュがエスケープ文字として使用されます。 エスケープされていないバックスラッシュは、直後の文字のリテラル値を保持します (改行を除く)。 改行がバックスラッシュの直後にある場合、read ユーティリティーはこれを行の継続と解釈します。 バックスラッシュと改行の組み合わせは、入力がフィールドに分割される前に除去されます。 エスケープされていない他のバックスラッシュ文字はすべて、入力がフィールドに分割された後に除去されます。変更の終わり

変数が指定されない場合は、環境変数 REPLY に入力が割り当てられます。 read の終了状況は、ファイルの終わりを検知しない限り、0 です。

オプション

–p
共用プロセスから入力を受け取ります。
–r
エスケープ規則を無視し、入力を生のデータとして処理します。例えば、read –r は 最後の円記号 (¥) を行の継続文字とは解釈せず、入力の一部と見なします。
–s
variable で指定された変数だけでなく、コマンド・ヒストリー・ファイルに入力を追加します。
–u[d]
入力を、標準入力からではなく、1 桁のファイル記述子 d から 読み取ります。 デフォルトのファイル記述子は 0 です。
最初の変数パラメーターが以下の形式の場合、
variable?prompt
これは、入力を求めるプロンプトを定義しています。シェルが対話式の場合、read はファイル記述子 d に プロンプトを送ります (ただし、そのファイルが書き込み用に開かれており、端末装置である場合です)。プロンプトに対するデフォルトのファイル記述子は、2 です。

IFS=':'
while read name junk junk1 junk2 junk3
do
  echo $name
done </samples/comics.lst
これは、サンプル comics.lst ファイルから、コミック名のリストを作成します。

環境変数

read は、以下の環境変数を使用します。
IFS
内部フィールド分離文字として使用する文字のストリングを含みます。
PS2
対話式シェルが 使用するプロンプト・ストリングが含まれます。 対話式シェルがプロンプト・ストリングを使用するのは、-r オプションが指定されなかったときに 円記号で終わる行を対話式シェルが読み取る場合、または改行が入力された後に here ドキュメントが終了しない場合です。
REPLY
変数をまったく指定しなかった場合に、入力 (分離文字を含む) が入る。コマンドからの変数の省略の機能、および環境変数 REPLY の使用は、拡張機能です。

ローカライズ

read は、以下のローカライズ環境変数を使用します。
  • LANG
  • LC_ALL
  • LC_MESSAGES
  • NLSPATH

詳しくは、ローカライズを参照してください。

使用上の注意

read は、組み込みシェル・コマンドです。

終了値

0
正常終了
1
以下のいずれかの理由による失敗
  • 入力上のファイルの終わり
  • variable が正しくない
  • –u の後に指定された記述子が正しくない
  • 共用プロセスが欠落している
2
コマンド行の引数が正しくない

メッセージ

以下の エラー・メッセージが出される可能性があります。
Cannot read on file descriptor …
読み取り用に開かれていないファイル記述子を読み取ろうとしました。

移植性

POSIX.2, X/Open 移植性ガイド.

–p–s、および –u オプションは、POSIX 標準の拡張です。

関連情報

continuefcprintsh