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 の場合、a と b の間に複数のブランクがあるとしても、フィールドは 2 つです。
コマンド行の n 番目の variable には、n 番目のフィールドが割り当てられます。variable より多くの入力フィールドがある場合、まだ割り当てられていないフィールドは、すべて最後の variable に 割り当てられます。フィールドよりも多くの変数がある場合、余分の変数にはヌル・ストリング ("") が割り当てられます。
デフォルトでは、read オプションが指定されない場合は、バックスラッシュがエスケープ文字として使用されます。
エスケープされていないバックスラッシュは、直後の文字のリテラル値を保持します (改行を除く)。
改行がバックスラッシュの直後にある場合、read ユーティリティーはこれを行の継続と解釈します。
バックスラッシュと改行の組み合わせは、入力がフィールドに分割される前に除去されます。
エスケープされていない他のバックスラッシュ文字はすべて、入力がフィールドに分割された後に除去されます。
変数が指定されない場合は、環境変数 REPLY に入力が割り当てられます。 read の終了状況は、ファイルの終わりを検知しない限り、0 です。
variable?prompt
これは、入力を求めるプロンプトを定義しています。シェルが対話式の場合、read はファイル記述子 d に
プロンプトを送ります (ただし、そのファイルが書き込み用に開かれており、端末装置である場合です)。プロンプトに対するデフォルトのファイル記述子は、2 です。IFS=':'
while read name junk junk1 junk2 junk3
do
echo $name
done </samples/comics.lst
これは、サンプル comics.lst ファイルから、コミック名のリストを作成します。read は、組み込みシェル・コマンドです。
POSIX.2, X/Open 移植性ガイド.
–p、–s、および –u オプションは、POSIX 標準の拡張です。
continue、fc、print、sh