read コマンド

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

標準入力、 または -u オプションの引き数として指定されたファイル・ディスクリプター fd から 1 行を読み込み、最初の単語を最初の name に代入し、2 番目の単語を 2 番目の name に代入します。以降も同様です。 余った単語とそれらの間の区切り文字は、最後の name に代入されます。 name よりも標準入力から読み込んだ単語の方が少ない場合には、 余っている name には空文字列が値として代入されます。IFS 中の文字が、行を単語に分割するために使われます。 バックスラッシュ文字 (\) を使うと、 次に読み込んだ文字の特殊な意味を消したり、行を連結したりできます。 オプションが与えられていれば、以下の意味を持ちます:

-a aname

単語を配列変数 aname にインデックス順に代入します。インデックスは 0 から始まります。 新しい値が代入される前に aname は削除されます。他の name 引き数は無視されます。

-d delim

改行ではなく、delim の最初の文字が、入力行を終了するために使われます。

-e

標準入力を端末から読み込む場合、 readline (前述の READLINE ライブラリ のセクションを参照) を使って行を取得します。 readline は現在の (行編集がそれまで有効になっていなければデフォルトの) 編集設定を使います。

-i text

行を取得するのに readline が使われるとき、入力を開始する前に編集バッファに text が置かれます。

-n nchars

組み込みコマンド read は、 入力行全体が読み込まれるのを待たず、 nchars 文字を読み込んだ時点で戻ります。 ただし、nchars 文字が読み込まれる前に区切り文字が現われたときは、 区切り文字を優先します。

-N nchars

入力行全体が読み込まれるのを待たず、 nchars 文字を読み込んだ時点で戻ります。 ただし、入力に EOF が現れたときや、 read がタイムアウトになったときを除きます。 入力に区切り文字が現れても特別扱いはせず、 nchars 文字を読み込むまでは read が戻ることはありません。

-p prompt

入力を読み込もうとする前に標準エラー出力に prompt を表示します。 末尾に改行は付きません。 プロンプトが表示されるのは、入力を端末から読み込む場合だけです。

-r

バックスラッシュはエスケープ文字として作用しません。 バックスラッシュは行の一部とみなされます。 特に、バックスラッシュと改行の組み合わせを使って 複数の行を接続することはできません。

-s

静かな (silent) モード。端末に入力が行われても、文字はエコーされません。

-t timeout

入力行全体が timeout 秒以内で読み込まれない場合、 read をタイムアウトさせて、失敗の状態を返します。 timeout は小数部を持つ十進数でもかまいません。 このオプションは、 read が入力を端末やパイプ、その他の特殊ファイルから 読み込んでいる場合にのみ効果があります。 通常のファイルから読み込んでいる場合には影響ありません。 timeout が 0 のときは、read は指定したファイル・ディスクリプター から読み込める状態であれば成功の状態を返し、そうでなければ失敗の状態を返します。 タイムアウト時間を超えた場合、終了ステータスは 128 より大きい値になります。

-u fd

ファイル・ディスクリプター fd から入力を読み込みます。

name が全く与えられていない場合、読み込まれた行は変数 REPLY に代入されます。 ファイル末尾に到達した場合、 read がタイムアウトした場合 (この場合には終了ステータスは 128 より大きい値になります)、 -u の引き数として不正なファイル・ディスクリプターが指定した場合以外は、 終了コードは 0 です。

参考:

Man page of BASH_BUILTINS

Use awk to split line into array and use that array’s values in calling shell – Unix & Linux Stack Exchange

IFS

参考:

read するときは IFS= を付けておくと strict な感じで気持ちが良い – Qiita

Readline を使う (read -e)

参考:

Bash の read で好きなものを補完する – Qiita

Use a separate history for ‘read -e’ (readline) – Super User

Reading user command line input with PHP with readline, but bash is not default shell – Stack Overflow

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です