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 ファイル終わり文字が検出されたか、またはエラーが発生しました。

  1. 次のスクリプトは、ファイルの各行の先頭のフィールドを行末に移動して出力します。
    while read -r xx yy
    do
             print printf "%s %s/n" $yy $xx
    done < InputFile
  2. 読み取った行を複数フィールドに分割し、"Please enter: " をプロンプトとして使用するには、次のように入力します。
    read word1?"Please enter:  " word2
    システムは次のように表示します。
    Please enter:
    You enter:
    hello world
    変数 word1 の値が "hello" で変数 word2 の値が "world" です。
  3. 共用プロセスを作成し、print -p を使用して共用プロセスに書き込み、 read -p を使用して共用プロセスから入力を読み取るには、次のように入力します。
    
    (read; print "hello $REPLY") 
    print -p "world"
    read -p line
    line 変数の値は "hello world" です。
  4. 入力行のコピーをコマンドとしてヒストリー・ファイルに保存するには、次のように入力します。
    
    read -s line < input_file
    input_file に "echo hello world" が入ると、"echo hello world" がコマンドとしてヒストリー・ファイルに保管されます。