/usr/bin/read [-r] var...
read name...
set variable = $<
read [-prsu [n]] [name ? prompt] [name]...
read [-ACprs] [-d delim] [-n nsize] [-N nsize] [-t timeout] [-u unit] [vname?prompt] [vname... ]
read ユーティリティーは、標準入力から 1 行を読み込みます。
デフォルトでは、 –r オプションが指定されない限り、バックスラッシュ文字 (\) をエスケープ文字と見なします。標準入力が端末装置で、呼び出し側のシェルが対話型のとき、read は次の条件が存在していればプロンプトを表示し、継続行の入力を要求します。
–r オプションが指定されておらず、バックスラッシュで終わる行をシェルが読み込んだとき。
復帰改行文字の入力後、here-document (各種シェルで << を使用する機能) が終了しないとき。
シェル内と同じように、入力行はいくつかのフィールドに分割されます。先頭のフィールドは最初に指定された変数 var に、次のフィールドは 2 番目の変数 var に、というように割り当てられます。フィールドの総数より var オペランドの数が少ない場合、余ったフィールドおよびそれらの区切り文字はすべて最後に指定された var に割り当てられます。フィールドより var の方が多い場合には、余った var には空の文字列が設定されます。
var オペランドで指定された変数の設定は、現在のシェルの実行環境に影響を及ぼします。次のように、サブシェルや別のユーティリティー実行環境で呼び出された場合は、
(read foo) nohup read ... find . -exec read ... \;
これは呼び出し側の環境のシェル変数には影響しません。
標準入力はテキストファイルでなければなりません。
標準入力から 1 行を読み取り、内部フィールド区切り文字の IFS (通常はスペースまたはタブ) を用いてワード境界を区切り、最初のワードを最初の name に、2 番目のワードを 2 番目の name に、というように 順次割り当てます。 残ったワードは最後の name に割り当てます。\ に続いて復帰改行を入力すれば、行を継続できます。復帰改行以外の文字の前にバックスラッシュを付加すれば、その文字を引用できます。このバックスラッシュは、ワードが name に割り当てられる前に削除され、バックスラッシュの後に位置する文字は解釈されません。ファイルの終わりに到達した場合を除き、戻り値は 0 となります。
次の表記を見てください。
set variable = $<
この記述は、標準入力の 1 行を variable 値としてロードします (csh(1) 参照)。
シェルの入力メカニズムです。 1 つの行を読み取り、 IFS が示す文字を、区切り文字として使用して 行の内容をいくつかのフィールドに分割します。エスケープ文字 (\) は、次の文字の特別な意味または行の継続に関する意味を取り除くために使用します。–r で指定する raw モードでは、, および \ 文字が持つこの特殊な意味は無視されます。第 1 フィールドを 1 番目の name に、 第 2 フィールドを 2 番目の name に、 という順番で割り当てていき、 余ったフィールドがあれば最後の name に割り当てます。–p オプションは、シェルが |& を使用して生成したプロセスの入力パイプから入力行を取り出します。–s フラグは、入力をコマンドとして履歴ファイルに保存します。–u フラグは、 読み取り元となるファイル記述子番号を 1 桁の数値 n で指定します。ファイル記述子は、exec という特殊コマンドで開くことができます。n のデフォルト値は 0 です。name を省略すると、REPLY の値をデフォルトとして使用します。入力ファイルが読み込み用にオープンされていない場合とEOF に到達した場合を除き、終了ステータスは 0 です。–p オプションが指定されていてファイルの終わりを検出すると、このプロセスをクリアし別のプロセスを作成可能にします。最初の引数が ? を含んでいると、シェルが対話型のとき、 このワードの残りを標準エラーに対するプロンプトとして使用します。ファイルの終わりに到達しないかぎり、 終了ステータスは 0 です。
read は、標準入力から行を読み取り、IFS 変数値の文字を区切り文字として使用して複数のフィールドに分割します。–r オプションを指定しないかぎり、エスケープ文字 (\) は、次の文字の特別な意味または行の継続に関する意味を取り除くために使用します。
フィールドより変数の方が多い場合は、残りの変数には空の文字列が設定されます。フィールドより変数の数が少ない場合、余ったフィールドおよびそれらの区切り文字は最後に指定された変数に割り当てられます。var が指定されていない場合、変数 REPLY が使用されます。
var にバイナリ属性があり、–n または –N が指定されている場合、読み取られたバイト数は直接 var に格納されます。
1 番目の var の後ろに ?prompt を指定した場合、標準入力が端末またはパイプのときに、read は標準エラーにプロンプトを表示します。
/usr/bin/read および ksh88 では次のオプションがサポートされています。
バックスラッシュ文字を特別な文字としません。単なる入力行の一部として扱います。
ksh では次のオプションがサポートされています。
var の設定を解除して、インデックス 0 で始まる行に各フィールドを含むインデックス付き配列を作成します。
var の設定を解除して、var を複合変数として読み取ります。
行の終わりではなく、区切り記号 delim まで読み取ります。
最大で nsize バイトを読み取ります。バイナリフィールドのサイズはバイト単位です。
正確に nsize バイトを読み取ります。バイナリフィールドのサイズはバイト単位です。
標準入力の代わりに、現在の並行プロセスから読み取ります。ファイルの終わりに達すると、read は別の並行プロセスを作成できるように並行プロセスを切断します。
特に入力行を処理するときに、\ を処理しません。
入力のコピーをシェル履歴ファイルのエントリとして保存します。
端末またはパイプから読み取るときに、timeout を秒単位で指定します。
標準入力の代わりに、ファイル記述子番号 fd から読み取ります。デフォルト値は 0 です。
端末から読み取るときに、1 番目の変数値を表示して、それをデフォルト値として使用します。
次のオペランドを指定できます。
存在している、あるいはしていないシェル変数の名前。
次に示す /usr/bin/read の例は、入力ファイルの内容を、各行の先頭フィールドを最後尾に移動して出力するものです。
example% while read -r xx yy do printf "%s %s\n" "$yy" "$xx" done < input_file
read の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。
フィールドを区切るのに使われている、 内部フィールド区切り文字を定義します。
対話型シェルが標準エラー出力に出力するプロンプトの文字列を定義します。プロンプトが出力されるのは、–r オプションが指定されておらずバックスラッシュで終わる行を読み込んだとき、または復帰改行文字の入力後に here-document が終了しないときです。
次の終了ステータスが返されます。
正常終了。
ファイルの終わりを検出した、またはエラーが発生しました。
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
|
csh(1), ksh(1), ksh88(1), line(1), set(1), sh(1), attributes(5), environ(5), standards(5)