= Read 組込みコマンド
:encoding: UTF-8
:lang: ja
//:title: Yash マニュアル - Read 組込みコマンド

dfn:[Read 組込みコマンド]は標準入力から行を読み込み変数に代入します。

[[syntax]]
== 構文

- +read [-Aer] [-d {{行区切り}}] [-P|-p {{プロンプト}}] {{変数名}}...+

[[description]]
== 説明

Read コマンドは標準入力から一行の文字列を読み込み、それを{zwsp}link:params.html#variables[変数]に代入します。

+-r+ (+--raw-mode+) オプションを付けると、行内のバックスラッシュは通常の文字と同様に扱われます。

+-r+ (+--raw-mode+) オプションを付けない場合、読み込んだ文字列の中のバックスラッシュ (+\+) は{zwsp}link:syntax.html#quotes[引用符]として働きます。バックスラッシュが行末にあるときは行の連結を行います。{zwsp}link:interact.html[対話モード]のシェルが 2 行目以降を読み込むとき、標準入力が端末ならば link:params.html#sv-ps2[+PS2+ 変数]の値がプロンプトとして出力されます。

通常、入力行は改行文字まで読み込まれます。+-d+ (+--delimiter+) オプションを指定すると、改行文字の代わりに指定された{{行区切り}}文字まで読み込みます。{{行区切り}}文字は 1 文字である必要があります。

読み込んだ文字列は、{zwsp}link:expand.html#split[単語分割]によって分割します。分割後の各文字列が、それぞれオペランドで指定された変数の値に順に設定されます。指定された変数の数より分割結果のほうが多い場合は、最後の変数に残りの分割結果の全てが入ります。分割結果の数より指定された変数のほうが多い場合は、余った変数には空文字列が入ります。

[[options]]
== オプション

+-A+::
+--array+::
最後に指定した変数を{zwsp}link:params.html#arrays[配列]にします。分割後の各文字列が配列の要素として設定されます。

+-d {{行区切り}}+::
+--delimiter={{行区切り}}+::
改行文字の代わりに指定された{{行区切り}}文字まで読み込みます。

+-e+::
+--line-editing+::
読み込みに{zwsp}link:lineedit.html[行編集]を使用します。
+
行編集が有効になるには以下の条件が全て満たされている必要があります:
+
- シェルが{zwsp}link:interact.html[対話モード]である。
- link:_set.html#so-vi[vi] または link:_set.html#so-emacs[emacs] オプションが有効になっている。
- 標準入力と標準エラーが端末である。
- {{行区切り}}が改行文字である。

+-P+::
+--ps1+::
シェルが対話モードで標準入力が端末ならば、(最初の) 行を読み込む前に link:params.html#sv-ps1[+PS1+ 変数]をプロンプトとしてを表示します。

+-p {{プロンプト}}+::
+--prompt={{プロンプト}}+::
シェルが対話モードで標準入力が端末ならば、(最初の) 行を読み込む前に{{プロンプト}}を表示します。

+-r+::
+--raw-mode+::
読み込んだ文字列の中のバックスラッシュを引用符として扱わないようにします。

[[operands]]
== オペランド

{{変数名}}::
読み込んだ文字列を格納する変数の名前です。

[[exitstatus]]
== 終了ステータス

行を正常に読み込んだ場合は終了ステータスは 0 です。
入力の終わりに達した場合は 1 です。この場合はそれまでに読み込んだ文字列が変数に代入されます。
変数が読み取り専用の場合は 2 です。
標準入力が読み込めない場合は 3 です。
コマンドライン引数に構文エラーがある場合は 4 です。

[[notes]]
== 補足

Read コマンドは{zwsp}link:builtin.html#types[必須組込みコマンド]です。

POSIX では +-d+ と +-r+ オプションのみが規定されています。他のオプションは link:posix.html[POSIX 準拠モード]では使えません。
終了ステータスは 0 と 1 だけが POSIX で固定されています。他のエラーの場合はシェルによって終了ステータスが異なります。

+PS1+ 変数をプロンプトとして表示する際、{zwsp}link:params.html#sv-ps1r[+PS1R+] および link:params.html#sv-ps1s[+PS1S+] 変数も使用されます。 +PS2+ についても同様です。

// vim: set filetype=asciidoc expandtab:
