read コマンド
目的
標準入力から 1 行読み取ります。
構文
read [ -p ][ -r ][ -s ][ -u[ n ] ] [ VariableName?Prompt ]
[ VariableName ... ]
説明
read コマンドは、標準入力から一行読み取り、 IFS (内部フィールド・セパレーター) 変数の文字をセパレーターとして使用して、入力行内の各フィールドの値をシェル変数に割り当てます。 VariableName パラメーターは、入力行から 1 つのフィールドの値を取り込んだシェル変数の名前を指定します。VariableName パラメーターで指定した最初のシェル変数には、最初のフィールドの値が代入され、VariableName パラメーターで指定した 2 番目のシェル変数には 2 番目のフィールドの値が代入されるというように、最後のフィールドに達するまで、値が代入されていきます。 標準入力行のフィールド数が VariableName パラメーターで指定した対応するシェル変数よりも多い場合は、最後に指定したシェル変数に残りの全フィールドの値が代入されます。フィールド数がシェル変数よりも少ない場合は、残りのシェル変数は空文字列に設定されます。
注: VariableName パラメーターを省略すると、REPLY 変数をデフォルトの変数名として使用されます。
read コマンドによってシェル変数を設定すると、現在のシェル実行環境はその影響を受けます。
フラグ
| 項目 | 説明 |
|---|---|
| -p | |& (パイプ接続、アンパーサンド) を使用して、Korn シェルが実行したプロセスの出力から入力を読み取ります。
注: -p フラグにファイル終了文字を指定すると、別のプロセスを作成するためにこのプロセスのクリーンアップが実行されます。 |
| -r | read コマンドが ¥ (円記号) 文字を制御文字としてではなく、入力行の一部として処理するように指定します。 |
| -s | 入力をコマンドとして Korn シェルのヒストリー・ファイルに保存します。 |
| -u [ n ] | 1 桁のファイル・ディスクリプター数値 n から入力データを読み取ります。 このファイル・ディスクリプターは、ksh exec 組み込みコマンドでオープンすることができます。n のデフォルト値は 0 で、これはキーボードを示します。値 2 は標準エラーを示します。 |
パラメーター
| 項目 | 説明 |
|---|---|
| VariableName?Prompt | 変数の名前と使用されるプロンプトを指定します。対話式 Korn シェルはプロンプトを標準エラーに書き込んで、入力を実行します。 Prompt に複数のワードが含まれる場合、必ず各ワードを単一引用符または二重引用符で囲んでください。 |
| VariableName... | 1 つまたはそれ以上の変数名をホワイト・スペースで区切って指定します。 |
終了状況
このコマンドは、以下の終了値を戻します。
| 項目 | 説明 |
|---|---|
| 0 | 正常終了。 |
| >0 | ファイル終わり文字が検出されたか、またはエラーが発生しました。 |
例
- 次のスクリプトは、ファイルの各行の先頭のフィールドを行末に移動して出力します。
while read -r xx yy do print printf "%s %s/n" $yy $xx done < InputFile - 読み取った行を複数フィールドに分割し、"Please enter: " をプロンプトとして使用するには、次のように入力します。
システムは次のように表示します。read word1?"Please enter: " word2
変数 word1 の値が "hello" で変数 word2 の値が "world" です。Please enter: You enter: hello world - 共用プロセスを作成し、print -p を使用して共用プロセスに書き込み、
read -p を使用して共用プロセスから入力を読み取るには、次のように入力します。
line 変数の値は "hello world" です。(read; print "hello $REPLY") print -p "world" read -p line - 入力行のコピーをコマンドとしてヒストリー・ファイルに保存するには、次のように入力します。
input_file に "echo hello world" が入ると、"echo hello world" がコマンドとしてヒストリー・ファイルに保管されます。read -s line < input_file