Provided by: yash_2.39-1build1_amd64 bug

名前

       yash - POSIX 準拠コマンドラインシェル

概要

       yash [オプション...] [--] [オペランド...]

はじめに

       Yet another shell (yash) は Unix 系 OS 用コマンドラインシェルです。POSIX.1-2008 規格に (一
       部の例外を除いて) 準拠しています。POSIX 準拠を謳う他のシェルよりも精確な準拠を目指していま
       す。また、コマンド履歴やコマンドライン編集など、対話シェルとして標準的な機能も備えていま
       す。

       このプログラムは GNU General Public License (Version 2) の元で自由に再配布・変更などができ
       ます。ただし、プログラムの利用は全て各自の自己責任の下で行っていただくことになります。作者
       はプログラムの瑕疵に対して一切責任を取りません。また、このマニュアルはクリエイティブ・コモ
       ンズの表示-継承 2.1 日本ライセンスの下で自由に再配布・変更などができます。

       Yash は渡邊裕貴 (通称まじかんと) という一人の開発者によって開発されています。Yash の開発プ
       ロジェクトおよび ホームページは OSDN がホストしています。

シェルの起動

       Yash がプログラムとして起動されると、yash はいくつかの初期化処理を行った後、コマンドを読み
       取って実行する処理に移ります。これらの処理の内容は、主に起動時のコマンドライン引数によって
       決まります。

   起動時のコマンドライン引数
       Yash の起動時のコマンドライン引数は POSIX に準拠しています。POSIX で定められているとお
       り、引数は オプションオペランド に分類されます。引数の書式に関する一般的な説明について
       はコマンドの引数の構文を参照してください。オプションはオペランドより前に指定する必要があり
       ます。

       オプションに -c (--cmdline) オプションが含まれている場合、オペランドを少なくとも一つ与える
       必要があります。シェルは、この最初のオペランドをコマンドとして解釈・実行します。二つ目のオ
       ペランドがある場合は、特殊パラメータ 0 がそれに初期化されます。三つ目以降のオペランド
       は、位置パラメータになります。 -c (--cmdline) オプションを指定した場合は、ファイルや標準入
       力からコマンドを読み込むことはありません (ドット組込みコマンドを使用したときを除く)。

       オプションに -s (--stdin) オプションが含まれている場合、シェルは標準入力から一行ずつコマン
       ドを読み取って、解釈・実行します。オペランドはすべて位置パラメータの初期化に使われます。特
       殊パラメータ 0 はこのシェルが起動されたときに元のプログラムから受け取った最初の引数に初期
       化されます。

       -c (--cmdline) オプションも -s (--stdin) オプションも指定されなかった場合は、シェルはファ
       イルからコマンドを読み取って解釈・実行します。最初のオペランドが読み込むファイル名と見なさ
       れ、特殊パラメータ 0 の値となります。残りのオペランドは位置パラメータになります。オペラン
       ドが一つもない場合は、 -s (--stdin) オプションを指定したときと同様に標準入力からコマンドを
       読み込みます。

       -c (--cmdline) オプションと -s (--stdin) オプションを同時に使用することはできません。

       --help オプションまたは --version オプションが指定されている場合は、通常の初期化処理やコマ
       ンドの解釈・実行は一切行いません。それぞれシェルのコマンドライン引数の簡単な説明とバージョ
       ン情報を標準出力に出力した後、そのままシェルは終了します。 --version オプションを
       --verbose オプションと共に使用すると、シェルで利用可能な機能の一覧も出力されます。

       -i (--interactive) オプションが指定されている場合、シェルは対話モードになります。逆に +i
       (++interactive) オプションが指定されている場合、シェルは対話モードになりません。

       -l (--login) オプションが指定されている場合、シェルはログインシェルとして動作します。

       --noprofile, --norcfile, --profile, --rcfile 各オプションは、シェルの初期化処理の動作を指
       定します (後述)。

       その他のオプションとして、set 組込みコマンドで指定可能な各種オプションをシェルの起動時に指
       定することができます。(+ で始まるオプションを含む)

       最初のオペランドが - であり、かつオプションとオペランドが -- で区切られていない場合、その
       オペランドは特別に無視されます。

   シェルの初期化処理
       シェルの初期化処理は以下のように行われます。

        1. Yash はまず、(コマンドライン引数の前に渡される) それ自身の起動時の名前を解析します。そ
           の名前が - で始まる場合は、シェルはログインシェルとして動作します。また名前が sh であ
           る場合 (/bin/sh のように sh で終わる場合を含む) は、シェルは POSIX 準拠モードになりま
           す。

        2. オペランドが一つもなく、かつ標準入力と標準エラーがどちらも端末ならば、シェルは自動的に
           対話モードになります。ただし +i (++interactive) オプションが指定されている場合はそちら
           を優先します。

        3. 対話モードのシェルでは自動的にジョブ制御が有効になります。ただし +m (++monitor) オプ
           ションが指定されている場合はそちらを優先します。

        4. シェルは以下の初期化スクリプトを読み込んで解釈・実行します。(ただしシェルプロセスの実
           ユーザ ID と実効ユーザ ID が異なっているか、実グループ ID と実効グループ ID が異なって
           いる場合を除く)

            1. シェルがログインシェルとして動作している場合は、 --profile=ファイル名 オプションで
               指定したファイルを読み込んで実行します。(ただし --noprofile オプションが指定されて
               いるか POSIX 準拠モードの場合を除く) --profile=ファイル名 オプションが指定されてい
               ない場合は、 ~/.yash_profile がデフォルトのファイルとして使われます。

            2. シェルが対話モードの場合は、 --rcfile=ファイル名 オプションで指定したファイルを読
               み込んで実行します。(ただし --norcfile オプションが指定されている場合を除く)
               --rcfile オプションが指定されていない場合は、非 POSIX 準拠モードではファイル
               ~/.yashrc がデフォルトのファイルとして使われます。POSIX 準拠モードでは、 ENV 環境
               変数の値がパラメータ展開され、その結果をファイル名と見なしてファイルを読み込みま
               す。

           注記
           Yash は /etc/profile や /etc/yashrc や ~/.profile を自動的に読むことはありません。

コマンドの文法

       シェルはコマンドを一行ずつ読み込んで解釈し、実行します。一行に複数のコマンドがある場合
       は、それら全てを解釈してから実行します。一つのコマンドが複数行にまたがっている場合は、その
       コマンドを解釈し終えるのに必要なだけ後続の行が読み込まれます。コマンドを正しく解釈できない
       場合は、文法エラーとなり、コマンドは実行されません。

       非対話モードで文法エラーが発生した時は、シェルはコマンドの読み込みを中止するため、それ以降
       のコマンドは一切読み込まれません。

   トークンの解析と予約語
       コマンドは、いくつかのトークンによって構成されます。トークンとは、シェルの文法における一つ
       一つの単語のことを言います。トークンは原則として空白 (空白文字またはタブ文字) によって区切
       られます。ただしコマンド置換などに含まれる空白はトークンの区切りとは見なしません。

       以下の記号は、シェルの文法において特別な意味を持っています。これらの記号も多くの場合他の通
       常のトークンの区切りとなります。

           ; & | < > ( ) [newline]

       以下の記号はトークンの区切りにはなりませんが、文法上特別な意味を持っています。

           $ ` \ " ' * ? [ # ~ = %

       以下のトークンは特定の場面において予約語と見なされます。予約語は複合コマンドなどを構成する
       一部となります。

           ! { } case do done elif else esac fi
           for function if in then until while

       これらのトークンは以下の場面において予約語となります。

       •   それがコマンドの最初のトークンのとき

       •   それが他の予約語 (case, for, in を除く) の直後のトークンのとき

       •   それがコマンドの最初のトークンではないが、複合コマンドの中で予約語として扱われるべき
           トークンであるとき

       トークンが # で始まる場合、その # から行末まではコメントと見なされます。コマンドの解釈にお
       いてコメントは完全に無視されます。

   クォート
       空白や上記の区切り記号・予約語などを通常の文字と同じように扱うには、適切な引用符でクォート
       する必要があります。引用符は、それ自体をクォートしない限り通常の文字としては扱われませ
       ん。シェルでは以下の三種類の引用符が使えます。

       •   バックスラッシュ (\) は直後の一文字をクォートします。

           例外として、バックスラッシュの直後に改行がある場合、それは改行をクォートしているのでは
           なく、行の連結と見なされます。バックスラッシュと改行が削除され、バックスラッシュがあっ
           た行とその次の行が元々一つの行であったかのように扱われます。

       •   二つの一重引用符 (') で囲んだ部分では、全ての文字は通常の文字と同じように扱われま
           す。改行を一重引用符で囲むこともできます。ただし、一重引用符を一重引用符で囲むことはで
           きません。

       •   二つの二重引用符 (") で囲んだ部分も一重引用符で囲んだ部分と同様にクォートされます
           が、いくつか例外があります。二重引用符で囲んだ部分では、パラメータ展開・コマンド置換・
           数式展開が通常通り解釈されます。またバックスラッシュは $, `, ", \ の直前にある場合およ
           び行の連結を行う場合にのみ引用符として扱われ、それ以外のバックスラッシュは通常の文字と
           同様に扱われます。

   エイリアス
       コマンドを構成する各トークンは、それが予め登録されたエイリアスの名前に一致するかどうか調べ
       られます。一致するものがあれば、そのトークンはそのエイリアスの内容に置き換えられて、その後
       コマンドの解析が続けられます。これをエイリアス置換といいます。

       エイリアスの名前に引用符を含めることはできないので、引用符を含むトークンはエイリアス置換さ
       れません。また、予約語やコマンドを区切る記号もエイリアス置換されません。

       エイリアスには通常のエイリアスとグローバルエイリアスの二種類があります。通常のエイリアス
       は、コマンドの最初のトークンにのみ一致します。グローバルエイリアスはコマンド内の全てのトー
       クンが一致の対象です。グローバルエイリアスは POSIX 規格にはない拡張機能です。

       通常のエイリアスで置換された部分の最後の文字が空白の場合、特例としてその直後のトークンにも
       通常のエイリアスの置換が行われます。

       エイリアス置換の結果がさらに別のエイリアスに一致して置換される場合もあります。しかし、同じ
       エイリアスに再び一致することはありません。

       エイリアスを登録するには alias 組込みコマンドを、登録を削除するには unalias 組込みコマンド
       を使用します。

   単純コマンド
       最初のトークンが予約語でないコマンドは、単純コマンドです。単純コマンドは単純コマンドの実行
       のしかたに従って実行されます。

       単純コマンドの初めのトークンが 名前= の形式になっている場合は、それは変数代入と見なされ
       ます。ただしここでの名前は、一文字以上のアルファベット・数字または下線 (_) で、かつ最初が
       数字でないものです。変数代入ではない最初のトークンはコマンドの名前と解釈されます。それ以降
       のトークンは (たとえ変数代入の形式をしていたとしても) コマンドの引数と解釈されます。

       名前=(トークン列) の形になっている変数代入は、配列の代入となります。括弧内には任意の個数の
       トークンを書くことができます。またこれらのトークンは空白・タブだけでなく改行で区切ることも
       できます。

   パイプライン
       パイプラインは、一つ以上のコマンド (単純コマンド、複合コマンド、または関数定義) を記号 |
       で繋いだものです。

       二つ以上のコマンドからなるパイプラインの実行は、パイプラインに含まれる各コマンドをそれぞれ
       独立したサブシェルで同時に実行することで行われます。この時、各コマンドの標準出力は次のコマ
       ンドの標準入力にパイプで受け渡されます。最初のコマンドの標準入力と最後のコマンドの標準出力
       は元のままです。最後のコマンドの終了ステータスがパイプラインの終了ステータスになります。

       パイプラインの先頭には、記号 ! を付けることができます。この場合、パイプラインの終了ステー
       タスが逆転します。つまり、最後のコマンドの終了ステータスが 0 のときはパイプラインの終了ス
       テータスは 1 になり、それ以外の場合は 0 になります。

           注記
           最後のコマンドの終了ステータスがパイプラインの終了ステータスになるため、パイプラインの
           実行が終了するのは少なくとも最後のコマンドの実行が終了した後です。しかしそのとき他のコ
           マンドの実行が終了しているとは限りません。また、最後のコマンドの実行が終了したらすぐに
           パイプラインの実行が終了するとも限りません。(シェルは、他のコマンドの実行が終わるまで
           待つ場合があります)

           注記
           POSIX 規格では、パイプライン内の各コマンドはサブシェルではなく現在のシェルで実行しても
           よいことになっています。

   And/or リスト
       And/or リストは一つ以上のパイプラインを記号 && または || で繋いだものです。

       And/or リストの実行は、and/or リストに含まれる各パイプラインを条件付きで実行することで行わ
       れます。最初のパイプラインは常に実行されます。それ以降のパイプラインの実行は、前のパイプラ
       インの終了ステータスによります。

       •   二つのパイプラインが && で繋がれている場合、前のパイプラインの終了ステータスが 0 なら
           ば後のパイプラインが実行されます。

       •   二つのパイプラインが || で繋がれている場合、前のパイプラインの終了ステータスが 0 でな
           ければ後のパイプラインが実行されます。

       •   それ以外の場合は、and/or リストの実行はそこで終了し、それ以降のパイプラインは実行され
           ません。

       最後に実行したパイプラインの終了ステータスが and/or リストの終了ステータスになります。

       構文上、and/or リストの直後には原則として記号 ; または & が必要です (コマンドの区切りと非
       同期コマンド参照)。

   コマンドの区切りと非同期コマンド
       シェルが受け取るコマンドの全体は、and/or リストを ; または & で区切ったものです。行末、 ;;
       または ) の直前にある ; は省略できますが、それ以外の場合は and/or リストの直後には必ず ;& のどちらかが必要です。

       And/or リストの直後に ; がある場合は、その and/or リストは同期的に実行されます。すなわ
       ち、その and/or リストの実行が終わった後に次の and/or リストが実行されます。And/or リスト
       の直後に & がある場合は、その and/or リストは非同期的に実行されます。すなわち、その and/or
       リストの実行を開始した後、終了を待たずに、すぐさま次の and/or リストの実行に移ります。非同
       期な and/or リストは常にサブシェルで実行されます。また終了ステータスは常に 0 です。

       ジョブ制御を行っていないシェルにおける非同期な and/or リストでは、標準入力が自動的に
       /dev/null にリダイレクトされるとともに、SIGINT と SIGQUIT を受信したときの動作が 『無視』
       に設定されこれらのシグナルを受けてもプログラムが終了しないようにします。(POSIX 準拠モード
       では、標準入力を /dev/null にリダイレクトするのはジョブ制御を行っていないシェルではなく対
       話モードのシェルです。また POSIX 準拠モードではジョブ制御を行っていても SIGINT と SIGQUIT
       が 『無視』 に設定されます)

       ジョブ制御を行っているかどうかにかかわらず、非同期コマンドを実行するとシェルはそのコマンド
       のプロセス ID を記憶します。特殊パラメータ ! を参照すると非同期コマンドのプロセス ID を知
       ることができます。非同期コマンドの状態や終了ステータスは jobs や wait 組込みコマンドで知る
       ことができます。

   複合コマンド
       複合コマンドは、より複雑なプログラムの制御を行う手段を提供します。

       グルーピング
           グルーピングを使うと、複数のコマンドを一つのコマンドとして扱うことができます。

           通常のグルーピングの構文
               { コマンド...; }

           サブシェルのグルーピングの構文
               (コマンド...)

           {} は予約語なので、他のコマンドのトークンとくっつけて書いてはいけません。一方 () は特殊な区切り記号と見なされるので、他のトークンとくっつけて書くことができます。

           通常のグルーピング構文 ({} で囲む) では、コマンドは (他のコマンドと同様に) 現在の
           シェルで実行されます。サブシェルのグルーピング構文 (() で囲む) では、括弧内のコマ
           ンドは新たなサブシェルで実行されます。

           POSIX 準拠モードでは括弧内に少なくとも一つのコマンドが必要ですが、非 POSIX 準拠モード
           ではコマンドは一つもなくても構いません。

           グルーピングの終了ステータスは、グルーピングの中で実行された最後のコマンドの終了ステー
           タスです。グルーピング内にコマンドが一つもない場合、グルーピングの終了ステータスはグ
           ルーピングの直前に実行されたコマンドの終了ステータスになります。

       If 
           If 文は条件分岐を行います。分岐の複雑さに応じていくつか構文のバリエーションがありま
           す。

           If 文の基本構文
               if 条件コマンド...; then 内容コマンド...; fi

           Else がある場合
               if 条件コマンド...; then 内容コマンド...; else 内容コマンド...; fi

           Elif がある場合
               if 条件コマンド...; then 内容コマンド...; elif 条件コマンド...; then 内容コマン
               ...; fi

           Elif と else がある場合
               if 条件コマンド...; then 内容コマンド...; elif 条件コマンド...; then 内容コマン
               ...; else 内容コマンド...; fi

           If 文の実行では、どの構文の場合でも、if の直後にある条件コマンドがまず実行されます。条
           件コマンドの終了ステータスが 0 ならば、条件が真であると見なされて then の直後にある
           容コマンドが実行され、if 文の実行はそれで終了します。終了ステータスが 0 でなければ、条
           件が偽であると見なされます。ここで elseelif もなければ、if 文の実行はこれで終わり
           です。else がある場合は、else の直後の内容コマンドが実行されます。elif がある場合
           は、elif の直後の条件コマンドが実行され、その終了ステータスが 0 であるかどうか判定され
           ます。その後は先程と同様に条件分岐を行います。

           elif ...; then ...; は一つの if 文内に複数あっても構いません。

           If 文全体の終了ステータスは、実行された内容コマンドの終了ステータスです。内容コマンド
           が実行されなかった場合 (どの条件も偽で、else がない場合) は 0 です。

       While および until ループ
           While ループと until ループは単純なループ構文です。

           While ループの構文
               while 条件コマンド...; do 内容コマンド...; done

           Until ループの構文
               until 条件コマンド...; do 内容コマンド...; done

           非 POSIX 準拠モードでは 条件コマンド...; および 内容コマンド...; は省略可能です。

           While ループの実行ではまず条件コマンドが実行されます。そのコマンドの終了ステータスが 0
           ならば、内容コマンドが実行されたのち、再び条件コマンドの実行に戻ります。この繰り返しは
           条件コマンドの終了ステータスが 0 でなくなるまで続きます。

               注記
               条件コマンドの終了ステータスが最初から 0 でないときは、内容コマンドは一度も実行さ
               れません。

           Until ループは、ループを続行する条件が逆になっている以外は while ループと同じです。す
           なわち、条件コマンドの終了ステータスが 0 でなければ内容コマンドが実行されます。

           While/until ループ全体の終了ステータスは、最後に実行した内容コマンドの終了ステータスで
           す。(内容コマンドが存在しないか、一度も実行されなかったときは 0)

       For ループ
           For ループは指定されたそれぞれの単語について同じコマンドを実行します。

           For ループの構文
               for 変数名 in 単語...; do コマンド...; donefor 変数名 do コマンド...; done

           in の直後の単語は一つもなくても構いませんが、do の直前の ; (または改行) は必要です。こ
           れらの単語トークンは予約語としては認識されませんが、& などの記号を含めるには適切な
           クォートが必要です。in ...; を省略する場合は、本来は変数名と do の間に ; を入れてはい
           けませんが、非 POSIX 準拠モードでは ; があっても許容されます。また非 POSIX 準拠モード
           では コマンド...; がなくても構いません。

           POSIX 準拠モードでは、変数名はポータブルな (すなわち ASCII 文字のみからなる) 名前でな
           ければなりません。

           For ループの実行ではまず単語が単純コマンド実行時の単語の展開と同様に展開されます (in
           ...; がない構文を使用している場合は、in "$@"; が省略されているものと見なされます)。続
           いて、展開で生成されたそれぞれの単語について順番に一度ずつ以下の処理を行います。

            1. 単語を変数名で指定した変数に代入する

            2. コマンドを実行する

           単語はローカル変数として代入されます (POSIX 準拠モードのときを除く)。展開の結果単語が
           一つも生成されなかった場合は、コマンドは一切実行されません。

           For ループ全体の終了ステータスは、最後に実行したコマンドの終了ステータスです。コマンド
           があるのに一度も実行されなかったときは 0 です。コマンドがない場合、for ループの終了ス
           テータスは for ループの一つ前に実行されたコマンドの終了ステータスになります。

       Case 
           Case 文は単語に対してパターンマッチングを行い、その結果に対応するコマンドを実行しま
           す。

           Case 文の構文
               case 単語 in caseitem... esac

           Caseitem の構文
               (パターン) コマンド...;;

           casein の間の単語はちょうど一トークンでなければなりません。この単語トークンは予約
           語としては認識されませんが、& などの記号を含めるには適切なクォートが必要です。inesac の間には任意の個数の caseitem を置きます (0 個でもよい)。Caseitem の最初の (esac の直前の ;; は省略できます。またコマンド; で終わる場合はその ; も省略できま
           す。Caseitem の );; との間にコマンドが一つもなくても構いません。

           Caseitem のパターンにはトークンを指定します。各トークンを | で区切ることで複数のトーク
           ンをパターンとして指定することもできます。

           Case 文の実行では、まず単語が四種展開されます。その後、各 caseitem に対して順に以下の
           動作を行います。

            1. パターントークンを単語と同様に展開し、展開したパターンが展開した単語にマッチするか
               どうか調べます (パターンマッチング記法参照)。パターンとして指定されたトークンが複
               数ある場合はそれら各トークンに対してマッチするかどうか調べます (どれかのパターン
               トークンがマッチしたらそれ以降のパターントークンは展開されません。Yash はトークン
               が書かれている順番にマッチするかどうかを調べますが、他のシェルもこの順序で調べると
               は限りません)。

            2. マッチした場合は、直後のコマンドを実行し、それでこの case 文の実行は終了です。マッ
               チしなかった場合は、次の caseitem の処理に移ります。

           Case 文全体の終了ステータスは、実行したコマンドの終了ステータスです。コマンドが実行さ
           れなかった場合 (どのパターンもマッチしなかったか、caseitem が一つもないか、マッチした
           パターンの後にコマンドがない場合) は、終了ステータスは 0 です。

           POSIX 準拠モードでは、(| で区切られた最初の) パターントークンを esac にすることはでき
           ません。

   関数定義
       関数定義コマンドは、関数を定義します。

       関数定義コマンドの構文
           関数名 ( ) 複合コマンドfunction 関数名 複合コマンドfunction 関数名 ( ) 複合コマンド

       予約語 function を用いない一つ目の形式では、関数名には引用符などの特殊な記号を含めることは
       できません。予約語 function を用いる二つ目または三つ目の形式では、関数名は実行時に四種展開
       されます。(POSIX 準拠モードでは、予約語 function を用いる形式の関数定義は使えません。また
       関数名はポータブルな (すなわち ASCII 文字のみからなる) 名前でなければなりません。)

       関数定義コマンドを実行すると、指定した関数名の関数が複合コマンドを内容として定義されます。

       関数定義コマンドに対して直接リダイレクトを行うことはできません。関数定義コマンドの最後にあ
       るリダイレクトは、関数の内容である複合コマンドに対するリダイレクトと見なされます。例えば
       func() { cat; } >/dev/null と書いた場合、リダイレクトされるのは func() { cat; } ではなく {
       cat; } です。

       関数定義コマンドの終了ステータスは、関数が正しく定義された場合は 0、そうでなければ非 0 で
       す。

パラメータと変数

       パラメータとは、パラメータ展開で値に置き換えられるデータを言います。パラメータには位置パラ
       メータ・特殊パラメータ・変数の三種類があります。

   位置パラメータ
       位置パラメータは 1 以上の自然数によって識別されるパラメータです。例えば位置パラメータが三
       つある場合、それらは順に 1, 2, 3 という名称で識別されます。位置パラメータの個数は特殊パラ
       メータ # で取得できます。また全ての位置パラメータを表す特殊パラメータとして *@ があり
       ます。

       位置パラメータは、シェルの起動時に、シェルのコマンドライン引数を元に初期化されます (起動時
       のコマンドライン引数参照)。引数のうち、位置パラメータの値として与えられたオペランドが順に
       一つずつ位置パラメータとなります。

       シェルのコマンド実行中に関数が呼び出されるとき、位置パラメータはその関数の呼び出しに対する
       引数に変更されます。すなわち、関数の実行中は位置パラメータによって関数の引数を参照できま
       す。関数呼び出しの直前の位置パラメータの値は保存されており、関数の実行が終了する際に元の値
       に戻ります。

       位置パラメータは、set や shift などの組込みコマンドによって変更できます。

       0 は位置パラメータとは見なされません (特殊パラメータの一つです)。

   特殊パラメータ
       特殊パラメータは一文字の記号によって識別されるパラメータです。特殊パラメータにはユーザが明
       示的に値を代入することはできません。

       Yash では以下の特殊パラメータが利用可能です。

       0
           このパラメータの値は、シェルの起動時に与えられたシェルの実行ファイルの名称またはスクリ
           プトファイルの名称です。(起動時のコマンドライン引数参照)

       #
           このパラメータの値は、現在の位置パラメータの個数を表す 0 以上の整数です。

       $
           このパラメータの値は、シェル自身のプロセス ID を表す正の整数です。この値はサブシェルに
           おいても変わりません。

       -
           このパラメータの値は、現在シェルで有功になっているオプションの文字をつなげたもので
           す。この値には、シェルの起動時にコマンドライン引数で指定できる一文字のオプションのうち
           現在有効になっているものが全て含まれます。set 組込みコマンドでオプションを変更した場合
           は、その変更がこのパラメータの値にも反映されます。

       ?
           このパラメータの値は、最後に終了したパイプラインの終了ステータスを表す 0 以上の整数で
           す。

       !
           このパラメータの値は、最後に実行した非同期コマンドのプロセス ID です。

       *
           このパラメータの値は、現在の位置パラメータの値です。位置パラメータが一つもない場合、こ
           のパラメータの値は空文字列です。位置パラメータが複数ある場合、このパラメータの値は全て
           の位置パラメータの値を連結したものです。各位置パラメータの値の間は以下に従って区切られ
           ます。

           •   変数 IFS が存在し、その値が空でない場合、各位置パラメータは変数 IFS の値の最初の文
               字で区切られます。

           •   変数 IFS が存在し、その値が空の場合、各位置パラメータは間に何も置かずに連結されま
               す。

           •   変数 IFS が存在しない場合、各位置パラメータは空白文字で区切られます。

       @
           このパラメータは、パラメータ * と同様に現在の全ての位置パラメータを表します。ただ
           し、このパラメータが二重引用符によるクォートの中で展開される場合の扱いがパラメータ *
           と異なります。この場合、各位置パラメータは文字で区切られるのではなく、(クォートの内部
           であるにもかかわらず) 単語分割されます。また位置パラメータが一つもない場合、このパラ
           メータは展開後の単語には残りません。

           例えば位置パラメータが一つもないとき、コマンドライン echo 1 "$@" 2echo12 とい
           う三つの単語に展開されます。位置パラメータが 12 23 の三つのとき、コマンドライン
           echo "$@"echo12 23 という四つの単語に展開され、コマンドライン echo "a$@b"echoa12 23b という四つの単語に展開されます。

   変数
       変数とはユーザが自由に代入可能なパラメータです。各変数は名前で区別され、それぞれが文字列の
       値を持ちます。

       変数の名前は、英数字と下線 (_) から構成されます。ただし変数名の頭文字を数字にすることはで
       きません。環境によってはこれ以外の文字も変数名に使用できます。

       シェルが扱う変数のうち、エクスポートの対象となっているものは環境変数といいます。これらの変
       数はシェルが外部コマンドを起動する際に外部コマンドに渡されます。シェルが起動されたときに
       シェルを起動したプログラムから渡された変数は自動的に環境変数になります。

       変数は、単純コマンドによって代入できます。また typeset 組込みコマンドなどでも変数に代入す
       ることができます。変数を削除するには unset 組込みコマンドを使います。

       シェルが使用する変数
           以下の名前の変数は、yash の実行において特別な意味を持っています。

           CDPATH
               この変数は cd 組込みコマンドで移動先ディレクトリを検索するために使われます。

           COLUMNS
               この変数は端末ウィンドウの横幅 (文字数) を指定します。この変数が設定されている場
               合、デフォルトの横幅ではなくこの変数の値で指定された横幅が行編集で使われます。

           COMMAND_NOT_FOUND_HANDLER
               シェルが実行しようとしたコマンドが見つからなかったとき、この変数の値がコマンドとし
               て実行されます。不明なコマンドを実行したときに何か別のコマンドを実行させたい時に便
               利です。単純コマンドの実行を参照。

               この機能は POSIX 準拠モードでは働きません。

           DIRSTACK
               この配列変数はディレクトリスタックの実装に使われています。pushd 組込みコマンドで
               ディレクトリを移動したとき、前のディレクトリを覚えておくためにそのパス名がこの配列
               に入れられます。この配列の内容を変更することは、ディレクトリスタックの内容を直接変
               更することになります。

           ECHO_STYLE
               この変数は echo 組込みコマンドの挙動を指定します。

           ENV
               POSIX 準拠モードで対話モードのシェルが起動されたとき、この変数の値で示されるパスの
               ファイルが初期化スクリプトとして読み込まれます (シェルの初期化処理参照)。

           FCEDIT
               Fc 組込みコマンドでコマンドを編集する際、この変数の値で示されたエディタがコマンド
               の編集に使われます。

           HANDLED
               この変数は COMMAND_NOT_FOUND_HANDLER 変数の値が実行された後に、コマンドが見つから
               なかったことをエラーとするかどうかを指示します。単純コマンドの実行を参照。

           HISTFILE
               コマンド履歴を保存するファイルのパスを指定します。

           HISTRMDUP
               コマンド履歴の重複をチェックする個数を指定します。履歴にコマンドを追加する際、既に
               履歴にあるコマンドのうちここで指定した個数のコマンドが新しく追加されるコマンドと同
               じかどうかをチェックします。同じコマンドが既に履歴にあれば、それは履歴から削除され
               ます。

               例えばこの変数の値が 1 のときは、履歴に追加されるコマンドが一つ前のコマンドと同じ
               ならばそれは削除されます。それより古い履歴のコマンドは、(履歴に追加されるコマンド
               と同じでも) 削除されません。もしこの変数の値が HISTSIZE 変数の値と同じなら、履歴の
               中で重複するコマンドはすべて削除されます。あるいはもしこの変数の値が 0 なら、重複
               する履歴は一切削除されません。

           HISTSIZE
               コマンド履歴に保存される履歴項目の個数を指定します。

           HOME
               ユーザのホームディレクトリのパスを指定します。チルダ展開や cd 組込みコマンドの動作
               に影響します。

           IFS
               この変数は単語分割の区切りを指定します。シェルの起動時にこの変数の値は空白文字・タ
               ブ・改行の三文字に初期化されます。

           LANG, LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME
               これらの変数はシェルが動作するロケールを指定します。シェルが読み書きするファイルの
               エンコーディングやエラーメッセージの内容などはこの変数で指定されたロケールに従いま
               す。

               LC_CTYPE 変数の値はシェルの起動時にのみ反映されます。シェルの実行中にこの変数を変
               更してもシェルのロケールは変わりません (シェルが非 POSIX 準拠モードで対話モードの
               場合を除く)。

           LINENO
               この変数の値は、現在シェルが読み込んで実行しているファイルにおける、現在実行中のコ
               マンドのある行番号を示します。(対話モードでは、コマンドを入力して実行するたびに行
               番号は 1 に戻ります)

               一度この変数に代入したり変数を削除したりすると、この変数を用いて行番号を取得するこ
               とはできなくなります。

           LINES
               この変数は端末ウィンドウの行数を指定します。この変数が設定されている場合、デフォル
               トの行数ではなくこの変数の値で指定された行数が行編集で使われます。

           MAIL
               この変数はメールチェックの対象となるファイルのパスを指定します。

           MAILCHECK
               この変数はメールチェックを行う間隔を秒単位で指定します。この変数の値はシェルの起動
               時に 600 に初期化されます。

           MAILPATH
               この変数はメールチェックの対象となるファイルのパスを指定します。

           NLSPATH
               POSIX によるとこの変数の値はロケール依存のメッセージデータファイルのパスを指示する
               ことになっていますが、yash では使用していません。

           OLDPWD
               Cd 組込みコマンドなどで作業ディレクトリを変更したときに、変更前の作業ディレクトリ
               パスがこの変数に設定されます。この変数はデフォルトでエクスポート対象になります。

           OPTARG
               Getopts 組込みコマンドで引数付きのオプションを読み込んだとき、その引数の値がこの変
               数に設定されます。

           OPTIND
               この変数の値は、getopts 組込みコマンドで次に読み込むオプションのインデックスを表し
               ます。シェルの起動時にこの変数は 1 に初期化されます。

           PATH
               この変数は、コマンドの検索時にコマンドのありかを示すパスを指定します。

           PPID
               この変数の値は、シェルの親プロセスのプロセス ID を表す正の整数です。この変数はシェ
               ルの起動時に初期化されます。この変数の値はサブシェルにおいても変わりません。

           PROMPT_COMMAND
               POSIX 準拠モードでない対話モードのシェルにおいて、シェルが各コマンドのプロンプトを
               出す直前に、この変数の値がコマンドとして解釈・実行されます。これは、プロンプトを出
               す直前に毎回 eval -i -- "${PROMPT_COMMAND-}" というコマンドが実行されるのと同じで
               すが、このコマンドの実行結果は次のコマンドでの ?  特殊パラメータの値には影響しませ
               ん。

           PS1
               この変数の値は、対話モードのシェルが出力する標準のコマンドプロンプトを指定しま
               す。この値の書式についてはプロンプトの項を参照してください。

               この変数はシェルの起動時に \$ に初期化されます。(POSIX 準拠モード なら実効ユーザ
               ID が 0 かどうかによって $# のどちらか)

           PS1R
               この変数の値は、対話モードのシェルがコマンドを読み込む際に、入力されるコマンドの右
               側に表示されるプロンプトを指定します。この値の書式についてはプロンプトの項を参照し
               てください。

           PS1S
               この変数の値は、対話モードのシェルがコマンドを読み込む際に、入力されるコマンドを表
               示するフォントの書式を指定します。この値の書式についてはプロンプトの項を参照してく
               ださい。

           PS2
               この変数の値は、対話モードのシェルが出力する補助的なコマンドプロンプトを指定しま
               す。この値の書式についてはプロンプトの項を参照してください。 この変数はシェルの起
               動時に > に初期化されます。

           PS2R
               この変数は PS1R 変数と同様ですが、プロンプトとして PS1 変数ではなく PS2 変数の値が
               使用されるときに使用されます。

           PS2S
               この変数は PS1S 変数と同様ですが、プロンプトとして PS1 変数ではなく PS2 変数の値が
               使用されるときに使用されます。

           PS4
               Xtrace オプションが有効なとき、この変数の値が各トレース出力の前に出力されます。た
               だし出力の前にこの変数の値に対してパラメータ展開、コマンド置換、数式展開を行いま
               す。また POSIX 準拠モードでなければ、PS1 変数と同様に、バックスラッシュで始まる特
               殊な記法が利用できます。

               この変数はシェルの起動時に + に初期化されます。

           PS4S
               この変数は PS1S 変数と同様ですが、プロンプトとして PS1 変数が使用されるときではな
               く、トレース出力の際に PS4 変数の値が使用されるときに使用されます。この変数を使う
               とトレース出力のフォントの書式を変更することができます。

           PWD
               この変数の値は現在の作業ディレクトリの絶対パスを表します。この変数はシェルの起動時
               に正しいパスに初期化され、cd 組込みコマンドなどで作業ディレクトリを変更する度に再
               設定されます。この変数はデフォルトでエクスポート対象になります。

           RANDOM
               この変数は乱数を取得するために使用できます。この変数の値は 0 以上 32768 未満の一様
               分布乱数になっています。

               この変数に非負整数を代入すると乱数を生成するを再設定できます。

               一度この変数を削除すると、この変数を用いて乱数を取得することはできなくなります。ま
               たシェルが POSIX 準拠モードで起動された場合、この変数で乱数を取得することはできま
               せん。

           TERM
               この変数は対話モードのシェルが動作している端末の種類を指定します。ここで指定された
               端末の種類に従って行編集機能は端末を制御します。

           YASH_AFTER_CD
               この変数の値は、cd 組込みコマンドや pushd 組込みコマンドで作業ディレクトリが変更さ
               れた後にコマンドとして解釈・実行されます。これは、作業ディレクトリが変わった後に毎
               回 eval -i -- "${YASH_AFTER_CD-}" というコマンドが実行されるのと同じです。

           YASH_LOADPATH
               ドット組込みコマンドで読み込むスクリプトファイルのあるディレクトリを指定しま
               す。PATH 変数と同様に、コロンで区切って複数のディレクトリを指定できます。この変数
               はシェルの起動時に、yash に付属している共通スクリプトのあるディレクトリ名に初期化
               されます。

           YASH_LE_TIMEOUT
               この変数は行編集機能で曖昧な文字シーケンスが入力されたときに、入力文字を確定させる
               ためにシェルが待つ時間をミリ秒単位で指定します。行編集を行う際にこの変数が存在しな
               ければ、デフォルトとして 100 ミリ秒が指定されます。

           YASH_VERSION
               この変数はシェルの起動時にシェルのバージョン番号に初期化されます。

       配列
           配列とは、一つの変数に複数の値 (文字列) を持たせたものです。一つの配列の複数の値は位置
           パラメータと同様に 1 以上の自然数で識別されます。

           配列は、単純コマンドによって代入できます。また array 組込みコマンドなどでも配列に代入
           することができます。配列を削除するには変数と同様に unset 組込みコマンドを使います。

           配列を配列のままエクスポートすることはできません。配列をエクスポートしようとすると、配
           列の各値をコロンで区切って繋いだ一つの文字列の値を持つ変数としてエクスポートされます。

           POSIX 準拠モードでは配列は使えません。

単語の展開

       コマンドを構成する各単語は、そのコマンドが実行されるときに展開されます。展開とは単語に含ま
       れるパラメータやパターンを処理して具体的な文字列値に置き換えることです。展開には以下の七種
       類があります。

        1. チルダ展開

        2. パラメータ展開

        3. コマンド置換

        4. 数式展開

        5. ブレース展開

        6. 単語分割

        7. パス名展開

       これらの展開は上に挙げた順序で行われます。特に最初の四つ (チルダ展開・パラメータ展開・コマ
       ンド置換・数式展開) を四種展開といいます。

   チルダ展開
       チルダ展開は、~ で始まる単語を特定のパス名に置き換える展開です。単語の先頭にある ~ から最
       初の / まで (/ がない場合は単語全体) が指定されたパス名に変換されます。ただし、置き換えら
       れる部分が一文字でもクォートされている場合は、チルダ展開は行われません。

       展開される内容は、置き換えられる部分の書式によって以下のように決まります。

       ~
           単なる ~ は、HOME 変数の値に置き換えられます。

       ~username
           ~ の後にユーザ名が書かれている場合は、そのユーザのホームディレクトリのパス名に置き換え
           られます。

       ~+
           ~+ は、PWD 変数の値に置き換えられます。

       ~-
           ~- は、OLDPWD 変数の値に置き換えられます。

       ~+n, ~-n
           この n は 0 以上の整数でなければなりません。この形式のチルダ展開は、+n または -n で指
           定されるディレクトリスタック内のパスの一つに展開されます。(dirs 組込みコマンド参照)

       変数代入の値に対してチルダ展開が行われる際、値がコロンで区切ってある場合は、コロンで区切っ
       てある各部分をそれぞれ単語とみなしてチルダ展開します。例えば HOME 変数の値が /home/foo の
       とき、

           VAR=~/a:~/b:~/c

       は

           VAR=/home/foo/a:/home/foo/b:/home/foo/c

       と等価です。

       チルダ展開に失敗した場合 (指定されたパス名が何らかの原因で得られなかった場合) の動作は
       POSIX では規定されていませんが、yash では何事もなかったかのように処理を続行します (置き換
       えられるはずだった部分はそのまま残され、エラーメッセージなどは出ません)。

       POSIX 準拠モードでは ~~ユーザ名 の形式の展開のみが有効です。

   パラメータ展開
       パラメータ展開は、単語の一部をパラメータの値に置き換える展開です。

       よく使われる単純なパラメータ展開の形式は ${パラメータ名} です。これはパラメータ名で指定さ
       れたパラメータの値に展開されます。さらに、以下の場合にはパラメータ名を囲む括弧を省略して
       $パラメータ名 のように書くこともできます。

       •   パラメータ名が特殊パラメータの場合

       •   パラメータ名が一桁の位置パラメータの場合

       •   パラメータ名が変数名で、直後に変数名の一部として誤解される恐れのある文字がない場合。例
           えば ${path}-name という単語は $path-name と書くこともできますが、 ${path}name$pathname と書くことはできません。

       パラメータ名として特殊パラメータでも位置パラメータでも変数名でもないものを指定した場合
       は、構文エラーになります。(Yash 以外のシェルでは構文エラーではなく展開エラーになるものもあ
       ります)

       シェルの unset オプションが無効な場合、パラメータ名に存在しない変数を指定すると展開エラー
       になります。Unset オプションが有効な場合は、存在しない変数は空文字列に展開されます。

       より複雑なパラメータ展開の形式では、パラメータの値を加工することができます。パラメータ展開
       の一般形は以下の通りです。

       パラメータ展開
           ${ 前置詞 パラメータ名 インデックス 加工指定 }

       ここでは便宜上パラメータ名インデックスの周りに空白を入れましたが、実際には空白を入れては
       いけません。パラメータ名以外の部分はいずれも省略可能です。

       前置詞
           前置詞としてパラメータ名の直前に記号 # を置くことができます。この場合、このパラメータ
           展開はいま展開しようとしている値の文字数を表す整数に展開されます。展開しようとしている
           のが配列変数の場合、各要素がそれぞれ文字数を表す整数に置き換えられます。

       パラメータ名
           パラメータ名には、特殊パラメータ・位置パラメータ・変数を指定することができます。この場
           合、パラメータ展開は指定されたパラメータの値に展開されます。指定したパラメータ名が配列
           変数の場合、配列の各要素が特殊パラメータ @ の場合と同様に単語分割されます (インデック
           ス [*] が指定された場合を除く)。

           パラメータ名としてパラメータ展開・コマンド置換・数式展開を指定することもできます。これ
           は特に展開の入れ子と言います。この場合、パラメータ展開は内側の展開の展開結果に展開され
           ます。なお、内側のパラメータ展開の括弧 { } は省略できません。また展開の入れ子は POSIX
           準拠モードでは使えません。

       インデックス
           インデックスは展開する値の一部を抜き出すのに使います。インデックスは以下の書式をしてい
           ます。

           インデックス
               [単語1]

               [単語1,単語2]

           ここでの単語1および単語2は通常のトークンと同様に解釈されますが、,] で強制的に区切
           られます。また空白やタブはトークンの区切りとはみなしません。

           インデックスは、以下のように解釈されます。

            1. まず、インデックスに含まれる単語1単語2に対してパラメータ展開・コマンド置換・数式
               展開を行います。

            2. インデックス[単語1] の書式をしていて、単語1の上記展開結果が *@# のいずれか
               の場合は、インデックスの解釈は終了です。

            3. 単語1単語2の上記展開結果を数式とみなして、数式展開と同様に計算します。計算の結果
               得られる整数がインデックスとなります。数式展開の結果が整数でない場合は展開エラーで
               す。単語2がない形式でインデックスを指定している場合は、単語2単語1と同じ整数を指
               定しているものとみなされます。

           パラメータ名が配列変数の場合または特殊パラメータ * または @ の場合、インデックスは配列
           の要素または位置パラメータの一部を指定しているものとみなされます。パラメータ名が上記以
           外の場合は、パラメータの値の一部を指定しているものとみなされます。インデックスで選択さ
           れた配列の要素またはパラメータの値の一部のみが、パラメータ展開の結果として展開結果に残
           ります。インデックスによる選択について以下の規則が適用されます。

           •   インデックスの整数が負数のときは、要素または文字を最後から数えるものとみなされま
               す。例えばインデックス [-2,-1] は配列の最後の二つの要素 (またはパラメータの値の最
               後の 2 文字) を選択します。

           •   インデックスの整数が存在しない要素または文字を指示している場合でも、エラーにはなり
               ません。例えば配列の要素数が 4 のときにインデックス [3,5] が与えられたときは 3 番
               目以降の全ての要素が選択され、インデックス [5,7] が与えられた時はどの要素も選択さ
               れません。

           •   インデックスの整数の一方が 0 ならば、(もう一方が何であれ) 展開結果には何も残りませ
               ん。

           インデックス[単語1] の書式をしていて、単語1の展開結果が *@# のいずれかだった場
           合は、パラメータは以下のように処理されます。

           *
               パラメータ名が配列変数の場合、配列の全要素を連結し一つの文字列にします。パラメータ
               が特殊パラメータ * または @ の場合、全ての位置パラメータを連結し一つの文字列にし
               ます。それ以外の場合はインデックス [1,-1] と同様です。(連結の仕方は特殊パラメータ
               * の位置パラメータの連結の仕方と同じです)

           @
               インデックス [1,-1] と同様です。

           #
               パラメータ名が配列変数の場合、このパラメータ展開は配列の要素数を表す整数に展開され
               ます。パラメータ名が特殊パラメータ * または @ の場合、このパラメータ展開は位置パラ
               メータの個数を表す整数に展開されます。それ以外の場合、このパラメータ展開はいま展開
               しようとしている値の文字数を表す整数に展開されます。

           パラメータ展開にインデックスが指定されていない場合は、インデックスとして [@] が指定さ
           れたものとみなされます。インデックスはPOSIX 準拠モードでは一切使えません。

           例1 通常の変数の展開

           以下のコマンドは文字列 ABC を出力します:

               var='123ABC789'
               echo "${var[4,6]}"

           例2 位置パラメータの展開

           以下のコマンドは文字列 2 3 4 を出力します:

               set 1 2 3 4 5
               echo "${*[2,-2]}"

           例3 配列の展開

           以下のコマンドは文字列 2 3 4 を出力します:

               array=(1 2 3 4 5)
               echo "${array[2,-2]}"

       加工指定
           加工指定はパラメータの値を加工します。加工された後の値がパラメータ展開の結果として展開
           されます。加工指定には以下の形式があります。

           -単語
               パラメータ名が存在しない変数を指示している場合は、このパラメータ展開は単語に展開さ
               れます。(Unset オプションが無効な時でもエラーになりません)

           +単語
               パラメータ名が存在する変数を指示している場合は、このパラメータ展開は単語に展開され
               ます。(Unset オプションが無効な時でもエラーになりません)

           =単語
               パラメータ名が存在しない変数を指示している場合は、単語の展開結果がその変数に代入さ
               れた後、このパラメータ展開はその値に展開されます。変数以外のものに対して代入しよう
               とすると展開エラーになります。(Unset オプションが無効な時でもエラーになりません)

           ?単語
               パラメータ名が存在しない変数を指示している場合は、エラーメッセージとして単語を標準
               エラーに出力します。(単語がない場合はデフォルトのエラーメッセージが出ます)

           :-単語, :+単語, :=単語, :?単語
               これらは上記の -+=?単語の組み合わせの加工指定と同様ですが、単語を使用す
               る条件が異なります。先頭に : が付かないものでは 『変数が存在するかどうか』 で判定
               されますが、: が付くものでは 『変数が存在し、その値が空文字列でないかどうか』 で判
               定されます。

           #単語
               単語をパターンとして見たとき、それがいま展開しようとしている値の先頭部分にマッチす
               るならば、そのマッチする部分を削除します。結果として、このパラメータ展開はマッチし
               なかった残りの部分に展開されます。マッチの仕方が複数通りある場合はできるだけ短く
               マッチさせます。

           ##単語
               この加工指定は #単語 と同様ですが、マッチの仕方が複数通りある場合はできるだけ長く
               マッチさせる点が異なります。

           %単語
               この加工指定は #単語 と同様ですが、値の先頭部分ではなく末尾部分にマッチさせる点が
               異なります。

           %%単語
               この加工指定は %単語 と同様ですが、マッチの仕方が複数通りある場合はできるだけ長く
               マッチさせる点が異なります。

           /単語1/単語2
               単語1をパターンとして見たとき、それがいま展開しようとしている値の一部にマッチする
               ならば、そのマッチする部分を単語2に置き換えます。結果として、このパラメータ展開は
               マッチした部分を単語2に置き換えた値に展開されます。マッチする箇所が複数ある場合
               は、最初の箇所が選ばれます。マッチの仕方が複数通りある場合はできるだけ長くマッチさ
               せます。

               この加工指定は POSIX 準拠モードでは使えません。

           /#単語1/単語2
               この加工指定は /単語1/単語2 と同様ですが、いま展開しようとしている値の先頭部分にし
               かマッチしない点が異なります。

           /%単語1/単語2
               この加工指定は /単語1/単語2 と同様ですが、いま展開しようとしている値の末尾部分にし
               かマッチしない点が異なります。

           //単語1/単語2
               この加工指定は /単語1/単語2 と同様ですが、マッチする箇所が複数ある場合は最初の箇所
               だけではなく全ての箇所を単語2に置き換える点が異なります。

           :/単語1/単語2
               この加工指定は /単語1/単語2 と同様ですが、いま展開しようとしている値全体にマッチす
               る場合しか対象としない点が異なります。

           いずれの形式においても、加工指定に含まれる単語は (それが使用されるときのみ) 四種展開さ
           れます。

           展開しようとしているパラメータ名が配列変数または特殊パラメータ @ または * の場合、加工
           指定は配列の各要素または各位置パラメータに対してそれぞれ作用します。

   コマンド置換
       コマンド置換は、指定されたコマンドを実行してその出力をコマンドラインに展開します。コマンド
       置換の書式は以下の通りです。

       コマンド置換
           $(コマンド)

           `コマンド`

       コマンド置換では、コマンドがサブシェルで実行されます。このときコマンドの標準出力がパイプを
       通じてシェルに送られます。結果として、コマンド置換はコマンドの出力結果に置き換えられま
       す。ただし、コマンドの出力の末尾にある改行は除きます。

       $() で囲んだコマンド置換のコマンドは、コマンド置換の入れ子やリダイレクトなどを考慮して
       予め解析されます。従って、$() の間には基本的に通常通りコマンドを書くことができます。た
       だし、数式展開との混同を避けるため、中のコマンド( で始まる場合はコマンドの最初に空白を
       挿し挟んでください。

       ` で囲むコマンド置換では、コマンド置換の入れ子などは考慮せずに、コマンドの中に最初に (バッ
       クスラッシュでクォートしていない) ` が現れたところでコマンド置換の終わりとみなされます。`
       で囲んだコマンド置換の中に ` で囲んだコマンド置換を書く場合は、内側の ` をバックスラッシュ
       でクォートする必要があります。その他、コマンドの一部として ` を入れたいときは、(それがコマ
       ンド内部で一重または二重引用符でクォートされていても) バックスラッシュでクォートする必要が
       あります。

       $() で囲んだコマンド置換の中のコマンドは、そのコマンド置換を含むコマンドを解析する時に
       一緒に解析されます (POSIX 準拠モードを除く)。` で囲んだコマンド置換の中のコマンドは、POSIX
       準拠モードであるかどうかに関わらず、そのコマンド置換が実行される時に毎回解析されます。

   数式展開
       数式展開は、文字列を数式として解釈して、その計算結果を表す数値に展開します。数式展開の書式
       は以下の通りです。

       数式展開
           $(())

       数式展開では、まずに対してパラメータ展開・コマンド置換・(入れ子の) 数式展開が行われま
       す。その結果得られた文字列を以下のように数式として解釈し、その計算結果を表す数値に展開され
       ます。

       Yash では、数式の中で整数 (C 言語の long 型) と浮動小数点数 (C 言語の double 型) を扱うこ
       とができます。ただし POSIX 準拠モードでは浮動小数点数は使えません。整数同士の演算の結果は
       整数に、浮動小数点数を含む演算の結果は浮動小数点数になります。

       数式では C 言語と (ほぼ) 同様に以下の演算子が使えます。

        1. ( )

        2. ++-- (後置演算子)

        3. ++--+-~!  (前置演算子)

        4. */%

        5. +- (二項演算子)

        6. <<>>

        7. <<=>>=

        8. ==!=

        9. &

       10. ^

       11. |

       12. &&

       13. ||

       14. ? : (三項演算子)

       15. =*=/=%=+=-=<<=>>=&=^=|=

       ++ および -- 演算子は POSIX 準拠モードでは使えません。

       原子式としては整数リテラル・浮動小数点数リテラル・変数が使用できます。数リテラルの書式は C
       言語に準じます。0 で始まる整数リテラルは八進数、0x で始まる整数リテラルは十六進数とみなさ
       れます。浮動小数点数リテラルでは指数表記も使えます (例えば 1.23×106 は 1.23e+6)。変数の値
       が計算で使われるとき、その値が数値でない場合はエラーになります。

       POSIX 準拠モードでは、変数は必ず数値として解釈されます。 POSIX 準拠モードでないときは、計
       算で使われる変数のみが数値として解釈され、他の変数はそのまま残ります。

           set +o posixly-correct
           foo=bar
           echo $((0 ? foo : foo)) # 「bar」を出力
           echo $((foo + 0))       # エラー

   ブレース展開
       ブレース展開は、ブレース ({ }) で囲んだ部分をいくつかの単語に分割します。ブレース展開は
       brace-expand オプションが有効な時のみ行われます。ブレース展開には二種類の形式があります。

       カンマ区切りのブレース展開
           {単語1,単語2,...,単語n}

       連続した数値のブレース展開
           {始点..終点}

           {始点..終点..差分}

       一つ目の形式は、ブレースで囲んだ部分を一つ以上のカンマ (,) で区切ったものです。区切られた
       それぞれの部分がブレース展開の前後の部分と結合されて、それぞれ単語として展開されます。例え
       ば a{1,2,3}ba1ba2ba3b という三つの単語に展開されます。

       二つ目の形式は {始点..終点} または {始点..終点..差分} です。始点終点差分は全て整数であ
       る必要があります。この形式のブレース展開では、始点から終点までの各整数がブレース展開の前後
       の部分と結合されて、それぞれ単語として展開されます。差分は整数の間隔を指定します。例えば
       a{1..3}ba1ba2ba3b という三つの単語に展開され、a{1..7..2}ba1ba3ba5ba7b と
       いう四つの単語に展開されます。始点終点より大きい場合は整数は降順に展開されます。

       複数のブレース展開を組み合わせたり、入れ子にしたりすることもできます。ブレースをブレース展
       開としてでなく通常の文字として扱うには、ブレースをクォートしてください。またカンマを区切り
       としてでなく通常の文字として扱うには、カンマをクォートしてください。

       ブレース展開では展開エラーは発生しません。ブレース展開が正しくできない場合は、単にそれはブ
       レース展開ではなかったものとして、そのまま残されます。

   単語分割
       単語分割は、展開の結果をいくつかの単語に分割します。

       単語分割で分割の対象となるのは、パラメータ展開・コマンド置換・数式展開で展開された結果の部
       分だけです。また、二重引用符によるクォートの中で展開された部分は、(特殊パラメータ @ の展開
       を除いて) 分割の対象となりません。

       単語分割は IFS 変数の値に従って行われます。IFS 変数が存在しない場合は、空白文字・タブ・改
       行の三文字が IFS 変数の値として使われます。

       IFS 変数の値に含まれている文字を IFS 文字といいます。IFS 文字のうち空白文字またはタブまた
       は改行であるものを IFS 空白類といいます。IFS 空白類以外の IFS 文字を IFS 非空白類といいま
       す。

       分割は以下の規則に従って行われます。

        1. 分割は、分割の対象となる展開結果の部分の中で、IFS 文字が現れる箇所で行われます。以下こ
           のような箇所を分割点と呼びます。複数の IFS 文字が連続して現れる場合は、それらをまとめ
           て一つの分割点とします。

        2. 分割点に IFS 非空白類が含まれている場合、その分割点に含まれる IFS 空白類はすべて無視さ
           れます。そして分割点に含まれる各 IFS 非空白類の前後で単語が分割されます。

        3. 分割点に IFS 非空白類が含まれていない (分割点が IFS 空白類だけからなる) 場合、その分割
           点の前後で単語が分割されます。ただし、このような分割点が元の単語の先頭または末尾にある
           場合を除きます。

        4. いずれの場合も、分割点は単語分割後の単語には残りません。

           注記
           IFS 変数の値が空文字列の場合は、単語は一切分割されません。

   パス名展開
       パス名展開は、単語をパターンとみなしてファイルを検索し、パターンにマッチする実在のファイル
       へのパス名に展開します。 パス名展開は glob オプションが無効な時は行われません。

       パス名展開においてパターンがマッチするには、検索の対象となるディレクトリの読み込み権限が必
       要です。検索しようとしたディレクトリがシェルにとって読み込み可能でなければ、シェルはその
       ディレクトリは空であるとみなします。

       以下のオプションがパス名展開の結果に影響します。

       null-glob
           マッチするファイルがない時、通常 (このオプションが無効な時) はパターンはそのまま残りま
           すが、このオプションが有効な時はパターンは削除され何も残りません。

       case-glob
           通常 (このオプションが有効な時) は、大文字と小文字を区別してマッチングを行いますが、こ
           のオプションが無効な時は大文字と小文字を区別せずマッチングを行います。

       dot-glob
           通常 (このオプションが無効な時) は、*?  などのワイルドカードやブラケット記法で始ま
           るパターンはピリオドで始まるファイル名にマッチしません。しかしこのオプションが有効な時
           はこのような制約は解除されます。

       mark-dirs
           このオプションを有効にすると、マッチしたファイルの種類がディレクトリの場合に展開される
           パス名の最後に / が付きます。

       extended-glob
           このオプションを有効にすると、パス名展開における拡張機能 (後述) が使えるようになりま
           す。

       パス名展開ではエラーは発生しません。マッチするファイルがない場合またはパターンが不正な場合
       は、展開は行われずパターンはそのまま残ります (null-glob オプションが有効な時を除く)。

       ファイルの検索とパターンマッチングは / で区切られたパス名の構成要素ごとに行われます。ワイ
       ルドカードやブラケット記法を全く含まない構成要素はパターンとはみなされず、検索とマッチング
       は行われません。従って、case-glob オプションが無効な時、/*/foo/*/fo[o] の展開結果が異
       なる可能性があります (前者では foo の部分がパターンとはみなされないので、例えば /bar/FOO
       というファイルがあってもマッチしません。)。

       パス名展開の拡張機能
           Extended-glob オプションが有効な時は、以下の特殊なパターンが使えるようになります。

           **
               指定されたディレクトリツリーに対し再帰的に検索を行います。すなわち、指定されたディ
               レクトリと、そのサブディレクトリ、さらにそのサブディレクトリなどに対し検索を行いま
               す。ただし名前がピリオドで始まるディレクトリは検索の対象になりません。例えば
               dir/**/file というパターンは、dir/file や dir/foo/file や dir/a/b/c/file など、dir
               ディレクトリの中にある全ての file ファイルへのパスに展開されます。

               この特殊なパターンは、 foo/bar/** のようにパターン全体の最後にある場合には効果があ
               りません。

           .**
               ** パターンと同様ですが、名前がピリオドで始まるディレクトリも含めて検索する点が異
               なります。

           ***
               ** パターンと同様ですが、検索の中でディレクトリへのシンボリックリンクが見つかった
               場合、そのディレクトリの中も検索の対象に含める点が異なります。

           .***
               *** パターンと同様ですが、名前がピリオドで始まるディレクトリも含めて検索する点が異
               なります。

パターンマッチング記法

       パターンマッチング記法は特定の文字列の集合を表すパターンの書式と意味の定義です。ある文字列
       があるパターンの表す文字列の集合に含まれる時、その文字列はそのパターンにマッチするといいま
       す。文字列がパターンに当てはまるかどうかは、以下に示す定義に従って判定されます。

   通常の文字
       クォートしてある文字および以下に示す特殊な意味を持つ文字以外のすべての文字は、通常の文字と
       して扱われます。パターンに含まれる通常の文字は、その文字自身に当てはまります。

       例えば abc というパターンは abc という文字列に当てはまります。(そしてこれ以外の文字列には
       一切当てはまりません)

   一文字ワイルドカード
       文字 ? は任意の一文字に当てはまります。

       例えば a?c というパターンは aacabca;c など、a で始まり c で終わる任意の 3 文字の文字列
       に当てはまります。

   複数文字ワイルドカード
       文字 * は任意の文字列に当てはまります。ここでいう任意の文字列には空文字列も含まれます。 例
       えば a*c というパターンは acabca;xyz;c など、a で始まり c で終わる任意の文字列に当ては
       まります。

   ブラケット記法
       括弧 [] で囲まれた部分はブラケット記法とみなされます。ただし、括弧の間には少なくとも一
       文字挟まれている必要があります。括弧の間にある文字は以下に示すブラケット記法のための特殊な
       パターン (ブラケット記法パターン) として解釈されます。ブラケット記法は、括弧の間にあるブラ
       ケット記法パターンが示す文字のどれか一つに当てはまります。

       最初の括弧 [ の直後に記号 ! がある場合、ブラケット記法に当てはまる文字と当てはまらない文字
       とが逆転します (そしてこの ! はブラケット記法パターンの一部とはみなされません)。Yash では
       [ の直後に ^ がある場合も同様に当てはまる文字と当てはまらない文字とが逆転します (が、他の
       シェルでは ^ の扱いが異なることもあります)。

       最初の括弧 [ の直後 (あるいは上述の ! または ^ がある場合はその直後) に括弧 ] がある場合
       は、それはブラケット記法の終わりを示す括弧としてではなくブラケット記法パターンの一部とみな
       されます。ブラケット記法パターンの解釈はクォートの処理の後に行われるので、クォートによって
       ブラケット記法パターン内の文字を通常の文字として扱わせることはできません。

       パターンの中に [ が含まれていても、それが正しいブラケット記法の形式になっていない場合
       は、その [ はブラケット記法ではなく通常の文字として扱われます。

   (ブラケット記法パターンにおける) 通常の文字
       以下に示す特殊な意味を持つ記号以外の文字はすべて通常の文字として扱われます。通常の文字はそ
       の文字自身を表します。

       例えば [abc] というブラケット記法は abc のどれかの文字に当てはまります。従って a[abc]c
       というパターンは aacabcacc という三つの文字列に当てはまります (そしてこれ以外の文字列
       には当てはまりません)。

   範囲指定
       二つの文字 (または照合シンボル) をハイフン (-) でつないだものは範囲指定とみなされます。範
       囲指定は、その二つの文字と照合順序上その間にある全ての文字を表します。照合順序とは文字を辞
       書順に並べるためにロケールデータに定義される文字の順序関係です。使用中のロケールに定義され
       ている照合順序に従って二つの文字の間にある文字が決まります。

       ハイフンの後に ] を置いた場合は、この ] はブラケット記法の終わりを示す括弧とみなされ、ハイ
       フンは通常の文字として扱われます。

       例えば [1-5] というブラケット記法は 12345 という五つの文字のどれか一つに当てはまり
       ます。

   照合シンボル
       照合シンボルを用いることで複数の文字からなる照合要素を一つの文字として扱うことができま
       す。(照合要素とは複数の文字をまとめて一つの文字として扱うことができるようにするために考え
       られた、より一般的な文字の概念です。パターンマッチングにおいて全ての文字は実際には照合要素
       として扱われています。) 照合シンボルは括弧 [. .] の中に照合要素を挟んだものとして表しま
       す。括弧内に書ける照合要素は使用中のロケールデータにおいて照合要素として登録されているもの
       に限ります。

       例えば従来スペイン語では 『ch』 という二文字を合わせて一文字として扱っていました。この二文
       字の組み合わせが照合要素としてロケールに登録されているならば、[[.ch.]df] というブラケット
       記法は chdf のどれかに当てはまります。もしここで [chdf] というブラケット記法を使う
       と、これは chdf のどれかに当てはまり、ch には当てはまりません。

   等価クラス
       等価クラスを用いることで、ある文字と等価であるとみなされる文字を指定することができます。等
       価クラスは括弧 [= =] の中に文字を挟んだものとして表します。括弧の間には照合シンボルのよう
       に複数の文字からなる照合要素を書くこともできます (上記参照)。等価クラスは、括弧で挟んだ文
       字そのものの他に、その文字と同じ第一等価クラスに属する全ての文字を表します。どの文字が第一
       等価クラスに属するかの定義は使用中のロケールデータに従います。

       例えばロケールデータにおいて a, à, á, â, ã, ä の 6 文字が同じ第一等価クラスに属すると定義
       されているとき、[[=a=]] というブラケット記法はこれら六つの文字のどれか一つに当てはまりま
       す。[[=à=]][[=á=]] も同様です。

   文字クラス
       文字クラスは特定の種類の文字の集合を表します。文字クラスは括弧 [: :] の間に文字クラスの名
       前を囲んだものとして表します。文字クラスの名前としては、以下に挙げる共通の文字クラスの他
       に、使用中のロケールで定義された独自の文字クラスが使用できます。いずれの文字クラスの場合
       も、文字クラスにどの文字が含まれるのかは使用中のロケールにおける文字クラスの定義に従いま
       す。

       [:lower:]
           小文字の集合

       [:upper:]
           大文字の集合

       [:alpha:]
           アルファベットの集合 ([:lower:][:upper:] を含む)

       [:digit:]
           十進法の数字の集合

       [:xdigit:]
           十六進法の数字の集合

       [:alnum:]
           アルファベットと数字の集合 ([:alpha:][:digit:] を含む)

       [:blank:]
           空白文字の集合 (改行を含まない)

       [:space:]
           空白文字の集合 (改行等を含む)

       [:punct:]
           句読点等の集合

       [:print:]
           表示可能な文字の集合

       [:cntrl:]
           制御文字の集合

       例えば [[:lower:][:upper:]] というブラケット記法は一文字の小文字または大文字に当てはまりま
       す。

リダイレクト

       リダイレクトはコマンドのファイル記述子を変更する機能です。リダイレクトを使用すると、コマン
       ドの標準入力や標準出力を通常とは異なるファイルに繋ぎ換えた状態でコマンドを実行することがで
       きます。

       リダイレクトはコマンド (単純コマンドまたは複合コマンド) にリダイレクト演算子を付することで
       行います。単純コマンドでは (他のトークンとくっつかない限り) どこでもリダイレクト演算子を置
       くことができます。複合コマンドではコマンドの最後にリダイレクト演算子を付けます。

       リダイレクトはコマンドの実行が始まる前に処理されます。一つのコマンドに複数のリダイレクトが
       ある場合は、リダイレクト演算子が書いてある順序で処理されます。オペランドなしの exec 組込み
       コマンドを実行する場合を除き、リダイレクトは対象となっているコマンドに対してのみ働きま
       す。すなわち、対象のコマンドの実行が終わるとリダイレクトによって変更されたファイル記述子は
       元の状態に戻ります。

       リダイレクト演算子は、< または > で始まります。< で始まるリダイレクト演算子はデフォルトで
       は標準入力 (ファイル記述子 0) に作用します。> で始まるリダイレクト演算子はデフォルトでは標
       準出力 (ファイル記述子 1) に作用します。どちらの種類の演算子でも、演算子の直前に非負整数を
       指定することでデフォルト以外のファイル記述子に作用させることができます (このとき整数と演算
       子との間に一切空白などを入れてはいけません。また整数をクォートしてもいけません)。

   ファイルへのリダイレクト
       最もよく使われるリダイレクトは、ファイルへのリダイレクトです。

       入力のリダイレクト
           < トークン

       出力のリダイレクト
           > トークン

           >| トークン

           >> トークン

       入出力のリダイレクト
           <> トークン

       リダイレクトに含まれるトークンは四種展開されます。対話シェルではさらにパス名展開も行われま
       す (パス名展開の結果が一つのファイルでなければエラーです)。トークンの展開結果がリダイレク
       ト対象のファイル名として使われます。

       入力のリダイレクトでは標準入力が対象ファイルからの読み込み専用ファイル記述子に置き換えられ
       ます。対象ファイルを開くことができなければエラーになります。

       出力のリダイレクトでは標準出力が対象ファイルへの書き込み専用ファイル記述子に置き換えられま
       す。対象ファイルが存在しなければ空の通常ファイルが作成されます。対象ファイルが既にある場合
       はそのファイルが開かれます。ただし演算子の種類によって以下のように挙動が異なります。

       •   演算子 >| では、対象ファイルが存在しそれが通常のファイルの場合、ファイルを開く際にファ
           イルの内容を空にします。

       •   演算子 > は、clobber オプションが有効ならば演算子 >| と同じです。しかし clobber オプ
           ションが無効ならば、対象ファイルが存在しそれが通常のファイルの場合、エラーになります。

       •   演算子 >> では、ファイルを追記モードで開きます。ファイルへの書き込みは常にファイルの末
           尾へ追記する形で行われます。

       入出力のリダイレクトでは標準入力が対象ファイルへの読み書き両用ファイル記述子に置き換えられ
       ます。対象ファイルが存在しなければ空の通常ファイルが作成されます。

       ソケットリダイレクト
           ファイルのリダイレクトにおいて、対象ファイル名が /dev/tcp/ホスト名/ポート または
           /dev/udp/ホスト名/ポート の形式をしていて、そのファイルを開くことができない場合、ファ
           イル名に含まれるホスト名ポートに対して通信を行うためのソケットが開かれます。

           /dev/tcp/ホスト名/ポート が対象の場合はストリーム通信ソケットを、/dev/udp/ホスト
           /ポート が対象の場合はデータグラム通信ソケットを開きます。典型的には、前者は TCP
           を、後者は UDP をプロトコルとして使用します。

           ソケットリダイレクトはどのリダイレクト演算子を使っているかにかかわらず常に読み書き両用
           のファイル記述子を開きます。

           ソケットリダイレクトは POSIX 規格にはない yash の独自拡張です。ただし、bash にも同様の
           機能があります。

   ファイル記述子の複製
       ファイル記述子の複製のリダイレクトでは、既存のファイル記述子をコピーしたり閉じたりできま
       す。

       ファイル記述子の複製
           <& トークン

           >& トークン

       トークンはファイルのリダイレクトの場合と同様に展開されますが、これはファイル名ではなくファ
       イル記述子として解釈されます。すなわち、トークンの展開結果はファイル記述子を表す非負整数と
       なる必要があります。

       演算子 <&トークンの展開結果で示されたファイル記述子を標準入力に複製します。演算子 >&トークンの展開結果で示されたファイル記述子を標準出力に複製します。演算子の直前に非負整数を
       指定することで、複製先のファイル記述子を変更できます。

       トークンの展開結果が非負整数ではなくハイフン (-) となった場合は、ファイル記述子を複製する
       代わりに閉じます。演算子 <& では標準入力が、演算子 >& では標準出力がデフォルトで閉じられま
       すが、演算子の直前に非負整数を指定することで、閉じるファイル記述子を変更できます。

       POSIX 準拠モードでは、<& で複製するファイル記述子は読み込み可能でなければならず、>& で複製
       するファイル記述子は書き込み可能でなければなりません。

   ヒアドキュメントとヒアストリング
       ヒアドキュメントヒアストリングを使うとコマンドに直接テキストを渡すことができます。

       ヒアドキュメント
           << トークン

           <<- トークン

       ヒアストリング
           <<< トークン

       ヒアドキュメント・ヒアストリングでは、標準入力がヒアドキュメント・ヒアストリングの内容を読
       み込み可能なファイル記述子に置き換えられます。

       ヒアドキュメント演算子 (<< または <<-) がコマンド中に現れると、その演算子のある行の次の行
       からはヒアドキュメントの内容とみなされます。ヒアドキュメントの内容の部分は、シェルのコマン
       ドとしては解釈されません。演算子の後にあるトークンはヒアドキュメントの内容の終わりを表しま
       す。(トークンでは展開は行われませんが、クォートは認識されます。) 演算子のある行より後の行
       でトークンだけからなる行が現れた時点でヒアドキュメントの内容は終わりだと判断されます。終わ
       りを表す行はヒアドキュメントの内容には含まれません。演算子 <<- を使っている場合は、ヒアド
       キュメントの内容の各行頭にあるタブはすべて削除されます。このときトークンの前にタブがあって
       も (その行に他の余計な文字がなければ) ヒアドキュメントの内容の終わりとして認識します。

       一行のコマンドに複数のリダイレクト演算子がある場合は、リダイレクトの内容は順番に処理されま
       す。すなわち、その行の次の行からは最初のリダイレクトの内容として扱われ、その内容が終わった
       ら、その次の行からは次のリダイレクトの内容として扱われます。最後のリダイレクトの内容が終
       わったら、その次の行からは再びコマンドとして解釈されます。

       リダイレクトの内容は基本的に単なる文字列として扱われます。内容に含まれる空白やタブ、その他
       の記号はそのままコマンドに渡されます。ただし、トークンが全くクォートされていない場合は、ヒ
       アドキュメントの内容はパラメータ展開・コマンド置換・数式展開され、$, `, ", \ の直前にある
       場合および行の連結を行う場合にのみバックスラッシュを引用符として扱えます。

       ヒアストリングでは、演算子の後にあるトークンはファイルのリダイレクトの場合と同様に展開され
       ます。この展開結果がヒアストリングの内容となります。ただしヒアストリングの内容の末尾には自
       動的に改行が付きます。

       ヒアストリングは POSIX 規格にはない yash の独自拡張ですが、bash, ksh, zsh にも同様の機能が
       あります。

   パイプリダイレクト
       パイプリダイレクトを用いるとプロセス間通信に利用可能なパイプを開くことができます。

       パイプリダイレクト
           >>| トークン

       トークンはファイルのリダイレクトの場合と同様に展開されますが、これはファイル名ではなくファ
       イル記述子として解釈されます。すなわち、トークンの展開結果はファイル記述子を表す非負整数と
       なる必要があります。

       パイプリダイレクトはパイプを開きます。標準出力 (演算子 >>| の直前に非負整数を指定している
       場合はその値のファイル記述子) がパイプに書きこむためのファイル記述子になります。またトーク
       の展開結果で示されたファイル記述子がパイプから読み込むためのファイル記述子になります。

       パイプリダイレクトは POSIX 規格にはない yash の独自拡張です。

   プロセスリダイレクト
       プロセスリダイレクトを用いると別のコマンドの入力または出力を受け渡せるパイプを開くことがで
       きます。

       プロセスリダイレクト
           <(サブコマンド...)

           >(サブコマンド...)

       プロセスリダイレクトでは、サブコマンドがサブシェルで実行されます。このとき、<(サブコマン
       ...) の形式のプロセスリダイレクトでは、サブコマンドの標準出力がこのコマンドの標準入力に
       渡るようパイプが開かれます。>(サブコマンド...) の形式のプロセスリダイレクトでは、このコマ
       ンドの標準出力がサブコマンドの標準入力に渡るようパイプが開かれます。

       プロセスリダイレクトは POSIX 規格にはない yash の独自拡張です。Bash と zsh にはプロセスリ
       ダイレクトと同様の構文を用いるプロセス置換という機能がありますが、プロセスリダイレクトとプ
       ロセス置換の挙動は異なっており、互換性はありません。

コマンドの実行とその環境

       この節ではコマンドがどのように実行されるかを説明します。

   単純コマンドの実行
       単純コマンドは以下の手順に従って実行されます。

        1. 単純コマンドに含まれる、変数代入とリダイレクト以外のトークンを全て展開します。展開エ
           ラーが発生した場合は、この単純コマンドの実行は中止されます (このとき単純コマンドの終了
           ステータスは非 0 です)。

           以下、展開の結果得られた最初の単語をコマンド名、それ以外の単語をコマンド引数と呼びま
           す。得られた単語が一つの場合は、コマンド引数は存在しません。得られた単語が一つもない場
           合は、コマンド名もコマンド引数も存在しません。

        2. 単純コマンドに対するリダイレクトを実行します。リダイレクトに含まれるトークンの展開はこ
           こで行われます。リダイレクトエラーが発生した場合は、この単純コマンドの実行は中止されま
           す (このとき単純コマンドの終了ステータスは非 0 です)。リダイレクトに含まれるトークンの
           展開時のエラーはリダイレクトエラーに含まれます。

        3. 単純コマンドに含まれる変数代入を実行します (配列の代入を含む)。それぞれの変数代入につ
           いて、値が展開され、指定された名前の変数に代入されます。代入エラーが発生した場合は、こ
           の単純コマンドの実行は中止されます (このとき単純コマンドの終了ステータスは非 0 で
           す)。代入される値の展開時のエラーは代入エラーに含まれます。

           •   コマンド名が存在しないか、あるいはコマンド名が特殊組込みまたは関数を示している場合
               は、変数代入は恒久的です。すなわち、代入の結果はこの単純コマンドの実行が終わった後
               もそのまま残ります。

           •   それ以外の場合は、変数代入は一時的です。すなわち、代入の効果はこの単純コマンドの実
               行中のみ有効で、実行が終わった後に代入は取り消されます。

           コマンド名が指定された場合または all-export オプションが有効な場合は、代入される変数は
           自動的にエクスポート対象になります。

        4. コマンド名が存在しない場合は、単純コマンドの実行はこれで終わりです。単純コマンドの終了
           ステータスは 0 になります (ただし単純コマンド実行中にコマンド置換が行われた時は、最後
           のコマンド置換のコマンドの終了ステータスが単純コマンドの終了ステータスになります)。

        5. 後述のコマンドの検索の仕方に従って実行すべきコマンドを特定し、そのコマンドを実行しま
           す。

           •   コマンドが外部コマンドの場合は、コマンドはサブシェルで exec システムコールを呼び出
               すことにより実行されます。コマンド名とコマンド引数が起動するコマンドに渡されま
               す。またエクスポート対象となっている変数が環境変数としてコマンドに渡されます。

           •   コマンドが組込みコマンドの場合は、コマンド引数を引数として組込みコマンドが実行され
               ます。

           •   コマンドが関数の場合は、その関数の内容が実行されます。コマンド引数が関数の引数とし
               て渡されます。

           実行したコマンドの終了ステータスがこの単純コマンドの終了ステータスになります。コマンド
           が見つからなかった場合は、コマンドは実行されず終了ステータスは 127 になります。コマン
           ドが見つかったが起動に失敗した場合は、終了ステータスは 126 になります。コマンドが起動
           されたがシグナルによって中断された場合は、終了ステータスはそのシグナルの番号に 384 を
           足した数になります。

               注記
               POSIX ではコマンドがシグナルによって中断された場合の終了ステータスは 128 より大き
               な数としか定められていないので、yash 以外のシェルでは終了ステータスが異なることが
               あります。
           非 POSIX 準拠モードにおいてコマンドが見つからなかったとき、コマンド eval -i --
           "${COMMAND_NOT_FOUND_HANDLER-}" が実行されます。ただしこのとき位置パラメータはコマンド
           名とコマンド引数に一時的に置き換えられます。またこのコマンドの実行中に定義されたローカ
           ル変数はこのコマンドの終了時に削除されます。このコマンドの実行時には HANDLED ローカル
           変数が空文字列を値としてあらかじめ定義されます。このコマンドの実行後にこの変数の値が空
           文字列でなくなっていれば、このコマンドの終了ステータスがこの単純コマンドの終了ステータ
           スとなり、コマンドが見つからなかったことはエラーとはみなされません。

       コマンドの検索
           単純コマンドで実行すべきコマンドは、展開で得られたコマンド名に基づいて以下の手順で特定
           されます。

            1. コマンド名にスラッシュ (/) が含まれている場合は、それが実行すべき外部コマンドへの
               パス名であると特定されます。

            2. コマンド名が特殊組込みコマンドならば、その組込みコマンドが実行すべきコマンドとして
               特定されます。

            3. コマンド名と同じ名前の関数が存在すれば、その関数が実行すべきコマンドとして特定され
               ます。

            4. コマンド名が準特殊組込みコマンドならば、その組込みコマンドが実行すべきコマンドとし
               て特定されます。

            5. コマンド名が通常の組込みコマンドならば、その組込みコマンドが実行すべきコマンドとし
               て特定されます。(POSIX 準拠モードのときを除く)

            6. PATH 変数の値に従って、実行すべき外部コマンドを検索しそのパス名を特定します。

               PATH 変数の値は、いくつかのディレクトリのパス名をコロン (:) で区切ったものとみなさ
               れます (空のパス名はシェルの作業ディレクトリを表しているものとみなします)。それら
               の各ディレクトリについて順に、ディレクトリの中にコマンド名と同じ名前の実行可能な通
               常のファイルがあるか調査します。そのようなファイルがあれば、そのファイルが実行すべ
               き外部コマンドとして特定されます (ただし、コマンド名と同じ名前の組込みコマンドがあ
               れば、代わりにその組込みコマンドが実行すべきコマンドとして特定されます)。どのディ
               レクトリにもそのようなファイルが見つからなければ、実行すべきコマンドは見つからな
               かったものとみなされます。

           外部コマンドの検索が成功しパス名が特定できた場合、そのパス名が絶対パスならば、シェルは
           そのパス名を記憶し、再び同じコマンドを実行する際に検索の手間を省きます。ただし、再びコ
           マンドを実行しようとした際に、記憶しているパス名に実行可能ファイルが見当たらない場合
           は、検索をやり直します。シェルが記憶しているパス名は hash 組込みコマンドで管理できま
           す。

   シェルの終了
       シェルは、入力が終わりに達して全てのコマンドを解釈・実行し終えた時や、exit 組込みコマンド
       を実行したときなどに終了します。シェルの終了ステータスは、シェルが最後に実行したコマンドの
       終了ステータスを 256 で割った余りです (一つもコマンドを実行しなかったときは 0)。

       Trap 組込みコマンドでシェル終了時のハンドラが登録されている場合は、シェルが終了する直前に
       そのハンドラが実行されます。ただしこのハンドラ内で実行したコマンドはシェルの終了ステータス
       には影響しません。

       対話モードでないシェルの実行中に下記エラーが発生した場合、シェルは直ちに終了します。このと
       きシェルの終了ステータスは非 0 です。

       •   文法エラーのためコマンドを解釈できないとき (シェルの初期化中を除く)

       •   POSIX 準拠モードで、特殊組込みコマンドのオプションやオペランドの使い方が間違っていると
           き

       •   POSIX 準拠モードで、特殊組込みコマンドに対してリダイレクトエラーまたは代入エラーが発生
           したとき

       •   展開エラーが発生したとき (シェルの初期化中を除く)

           注記
           Yash はそうではありませんが、コマンドの検索において実行すべきコマンドが見つからなかっ
           たときに直ちに終了するようなシェルもあります。

   関数
       関数は一つの複合コマンドを単純コマンドのように呼び出せるようにする機構です。関数は関数定義
       コマンドによって定義でき、単純コマンドによって実行できます。関数を削除するには unset 組込
       みコマンドを使います。

       Yash には、シェルの起動時に最初から定義されている関数は一つもありません。

       関数の実行は、関数の内容である複合コマンドを実行することによって行われます。関数の実行中
       は、関数の引数が位置パラメータになります。それまでの位置パラメータは一時的に使えなくなりま
       すが関数の実行が終わった時に元の位置パラメータに戻ります。

       ローカル変数
           ローカル変数とは、関数の実行中にだけ有効な一時的な変数です。ローカル変数は typeset 組
           込みコマンドを使って作ることができます。関数の実行中に作られたローカル変数は関数の実行
           が終わった時に削除され、ローカル変数を作る前の元の変数の状態に戻ります。

           関数内で定義したローカル変数は、関数の実行に先立って定義してあった同名の他の変数を隠蔽
           します。隠蔽された変数は、関数の実行が終わってローカル変数がなくなるまで使えなくなりま
           す。

           関数の実行中でないときにローカル変数を作ることはできません。ローカル変数を作ろうとして
           も、通常の変数になります。

   コマンドの実行環境
       シェルは実行時に以下の情報を保持します。

       •   作業ディレクトリ

       •   開いているファイル記述子

       •   ファイル作成マスク (umask)

       •   受信時の挙動が 『無視』 に設定されたシグナルの集合 (trap)

       •   環境変数

       •   リソース制限 (ulimit)

       これらの情報はシェルが起動されたときに元のプログラムからシェルに受け継がれます。そしてシェ
       ルが起動する外部コマンドやサブシェルにもシェルから受け継がれます。

       これらの情報は所定の組込みコマンド等を使って変更可能です。

       サブシェル
           サブシェルは、実行中のシェルのプロセスのコピーです。サブシェルは括弧 ( ) で囲んだグ
           ルーピングやパイプラインで使われます。

           サブシェルはシェルのプロセスのコピーであるため、上記の情報の他にシェルで定義された関数
           やエイリアスなどの情報も元のシェルから受け継ぎます。ただし、

           •   Trap 組込みコマンドで登録したトラップの設定は、(受信時の挙動が 『無視』 のものを除
               き) サブシェルではすべて解除されます。(注)

           •   サブシェルでは対話モードとジョブ制御は解除され、元のシェルのジョブの情報は受け継が
               れません。

           サブシェルは元のシェルとは独立しているため、サブシェルでの作業ディレクトリの変更や変数
           代入は元のシェルに影響しません。

               注記
               Yash 以外のシェルでは、サブシェル内で実行されるコマンドが trap 組込みコマンドのみ
               の場合にはトラップの設定を解除しないものもあります。

対話モード

       対話モードは、利用者が直接シェルを操作することを意図したモードです。シェルの起動時に -i オ
       プションを指定した場合 (その他対話モードが有効になる条件が満たされている場合)、シェルは対
       話モードになります。シェルが起動した後は、そのシェルの対話モードのオン・オフを切り替えるこ
       とはできません。

       対話モードが有効な時......

       •   シェルの初期化時に初期化スクリプトを読み込んで実行します。

       •   コマンドを読み込む際にメールチェックを行い、プロンプトを表示します。ジョブ制御が有効な
           らジョブの状態変化も表示します。端末の種類によっては行編集が使えます。

       •   実行したコマンドは自動的にコマンド履歴に登録されます。

       •   実行したコマンドが SIGINT/SIGPIPE 以外のシグナルによって中断されたとき、シェルはそのこ
           とを示す警告メッセージを標準エラーに出力します。

       •   ファイルのリダイレクトの対象ファイルを指示するトークンに対してパス名展開を行います。

       •   非同期コマンドの標準入力が自動的に /dev/null にリダイレクトされません。(POSIX 準拠モー
           ドのみ)

       •   コマンド解釈・実行時に文法エラーや展開エラーが発生してもシェルは終了しません。(シェル
           の終了を参照)

       •   SIGINT, SIGTERM, SIGQUIT シグナルを受けても、シェルは終了しません。

       •   シグナル受信時の挙動がシェルの起動時に最初から 『無視』 に設定されていても trap 組込み
           コマンドでシグナル受信時の挙動を変更できます。

       •   特殊パラメータ- の値に i が含まれます。

       •   シェル実行中に LC_CTYPE 変数の値が変わった時、それを直ちにシェルのロケール情報に反映し
           ます。(POSIX 準拠モードを除く)

       •   Exec オプションが無効な時でもコマンドを実行します。

       •   Ignore-eof オプションが効果を発揮します。

       •   Exit 組込みコマンドでシェルを終了しようとした時、停止しているジョブがあれば、シェルは
           警告を表示してすぐには終了しません。このときは続けざまにもう一度 exit コマンドを実行す
           ると本当にシェルを終了させることができます。シェルへの入力が終わりに達した場合も同様で
           す。

       •   Suspend 組込みコマンドでシェルを停止させようとした時、シェルがセッションリーダーならエ
           ラーを出力して停止しません。

       •   ドット組込みコマンドで読み込むスクリプトファイルが見つからなくても、シェルは終了しませ
           ん。

       •   Exec 組込みコマンドでコマンドの実行に失敗したときでもシェルは終了しません。(POSIX 準拠
           モードのときを除く)

       •   Wait 組込みコマンドで待っているジョブが終了したとき、そのことを示すメッセージを出力し
           ます。(ジョブ制御が有効な時のみ。POSIX 準拠モードを除く)

       •   Read 組込みコマンドが二行目以降を読むときプロンプトを出します。

   プロンプト
       対話モードでは、シェルはコマンドの入力を読み取る直前にプロンプトを標準エラーに出力しま
       す。プロンプトの内容は PS1 変数で指定します。ただし、複数行にわたるコマンドを読み取る
       際、二行目以降の読み取りには PS1 ではなく PS2 変数の値がプロンプトとして表示されます。

       プロンプトの表示の際には、まず PS1 (または PS2) 変数の値がパラメータ展開・コマンド置換・数
       式展開で展開されます (ただし POSIX によればパラメータ展開だけが行われることになっていま
       す)。この展開後の値は以下の通り解釈され、その結果がプロンプトとして標準エラーに出力されま
       す。

       POSIX 準拠モードでは、値に含まれる ! はこれから入力しようとしているコマンドの履歴番号に変
       換されます。感嘆符そのものをプロンプトに表示させるには !! と二つ続けて書きます。これ以外の
       文字はプロンプトにそのまま表示されます。

       POSIX 準拠モードでないときは、バックスラッシュで始まる以下の記法が解釈されます。これらの記
       法以外の文字はそのままプロンプトに表示されます。

       \a
           ベル文字 (ASCII コード番号 7)

       \e
           エスケープ文字 (ASCII コード番号 27)

       \j
           現在シェルが抱えているジョブの数

       \n
           改行文字 (ASCII コード番号 10)

       \r
           復帰文字 (ASCII コード番号 13)

       \!
           これから入力しようとしているコマンドの履歴番号

       \$
           シェルの実効ユーザ ID が 0 のときは #、それ以外の時は $\\
           バックスラッシュ (\)

       \[, \]
           この二つの記法は、実際には端末に表示されないプロンプトの一部分を指示するのに使いま
           す。\[\] で囲んだ部分は、行編集がプロンプトの文字数を計算する際に、文字数に数えら
           れません。端末に表示されないエスケープシーケンスなどをプロンプトに含める際は、その部分
           を \[\] で囲んでください。この指定を怠ると、行編集の表示が乱れることがあります。

       \fフォント指定.
           行編集を使用している場合、この記法は端末のフォントの表示を変更するための特殊な文字の羅
           列に変換されます (端末が対応している場合のみ)。行編集を使用していない場合や端末が対応
           していない場合は、この記法は単に無視されます。フォント指定の部分にはフォントの種類を指
           定するための以下の文字を指定します。

           k
               文字の色を黒にする

           r
               文字の色を赤にする

           g
               文字の色を緑にする

           y
               文字の色を黄にする

           b
               文字の色を青にする

           m
               文字の色をマゼンタにする

           c
               文字の色をシアンにする

           w
               文字の色を白にする

           K
               背景の色を黒にする

           R
               背景の色を赤にする

           G
               背景の色を緑にする

           Y
               背景の色を黄にする

           B
               背景の色を青にする

           M
               背景の色をマゼンタにする

           C
               背景の色をシアンにする

           W
               背景の色を白にする

           t
               文字または背景の色を明るくする (上記の文字・背景の色を変更する文字の直後でのみ有
               効)

           d
               文字と背景の色を標準状態に戻す

           s
               文字を目立たせる

           u
               文字に下線を引く

           v
               文字の色を反転させる

           b
               文字を点滅させる

           i
               文字の色を暗くする

           o
               文字を太く目立たせる

           x
               文字を見えなくする

           D
               色と装飾を標準状態に戻す

           文字と背景の色は最終的に端末によって決まるため、実際にはここで指定した色と異なる色で表
           示されることがあります。

       入力するコマンドの右側に表示されるプロンプトを指定することもできます (右プロンプ
       )。PS1/PS2 変数に対応する右プロンプトは PS1R/PS2R 変数で指定します。

       また、プロンプトのフォントだけでなく、入力するコマンドのフォントを変えることもできま
       す。PS1S (または PS2S) 変数に上述のフォントを指定するシーケンスを指定することで、コマンド
       入力時のコマンドのフォントが変わります。

       POSIX 準拠モードでないときは、プロンプトを出す前に PROMPT_COMMAND 変数の値がコマンドとして
       実行されます。

   コマンド履歴
       コマンド履歴は実行したコマンドを記録し後で再び実行することのできる機能です。対話モードで
       シェルが読み込んだコマンドは自動的にコマンド履歴に記録されます。履歴に記録したコマンドは行
       編集で呼び出して再実行することができます。また fc・history 組込みコマンドで履歴のコマンド
       を再実行したり編集したりすることもできます。

       コマンドは行単位で履歴に記録されます。空白以外の文字を一切含まない行は履歴には記録されませ
       ん。また hist-space オプションが有効なときは空白で始まる行は履歴に記録されません。

       コマンド履歴の内容は HISTFILE 変数で指定されるファイルに保存されます。対話モードのシェルの
       起動後に履歴関連の機能が初めて使用されるとき、HISTFILE 変数の値をファイル名とみなしてファ
       イルを開きます。既にファイルに履歴データが保存されている場合は、それが読み込まれます。ファ
       イルが存在しないか内容が履歴データではない場合は、新しい履歴ファイルに初期化されま
       す。HISTFILE 変数が存在しない場合やファイルを開くことができない場合は履歴はファイルに保存
       されませんが、履歴機能自体は使用できます。

       シェルが記録するコマンドの数は HISTSIZE 変数で指定します。履歴の件数がこの変数の値を超える
       と順次古いデータから削除されます。この変数が存在しない場合または値が自然数でない場合は、履
       歴は 500 件まで記録されます。

       HISTFILE および HISTSIZE 変数は履歴機能が初めて使用されるときにのみ参照され、それ以降は変
       数を再設定しても履歴機能の動作に影響しません。履歴機能が利用されるときというのは、具体的に
       は以下のタイミングです。

       •   Fc または history 組込みコマンドを実行したとき

       •   行編集を使用してコマンドを入力するとき (履歴データを行編集の中で使わなくても履歴機能は
           使われます)

       •   入力したコマンドが履歴に登録されるとき

       このため HISTFILE および HISTSIZE 変数は原則としてシェルの起動時に読み込まれる初期化スクリ
       プトの中で設定する必要があります。

       複数のシェルプロセスが同じ履歴ファイルを使用している場合、これらのシェルは一つの履歴データ
       を共有します。このとき例えばあるシェルプロセスで実行したコマンドを別のシェルプロセスで実行
       することができます。同じ履歴を使用しているシェルの間で HISTSIZE が異なっていると履歴が正し
       く共有されないので、HISTSIZE の値は統一するようにしてください。

       Yash は独自の形式の履歴ファイルを使用しているため、履歴ファイルを他の種類のシェルと共用す
       ることはできません。

       履歴に同じコマンドを記録する無駄を解消するため、HISTRMDUP 変数を使用することができます。新
       しくコマンドを履歴に記録しようとする際、すでに同じコマンドが最近の $HISTRMDUP 件の履歴デー
       タの中に記録されていれば、その既に記録されているコマンドは履歴から削除されます。

   メールチェック
       対話モードのシェルには、電子メールが届いたらそれを知らせる機能があります。これは所定のファ
       イルの更新日時を調べて、更新日時が変わっていたらメッセージを表示するというものです。受信し
       たメールのデータが保存されるファイルをチェック対象として指定しておくことで、メールを受信し
       たときにメッセージが表示されるようになります。

       ファイル更新のチェックはシェルがプロンプトを出す直前に行います。チェックを行う間隔を
       MAILCHECK 変数で指定することができます。この変数で指定した秒数が経過するごとに、シェルはプ
       ロンプトを出す直前にチェックを行います。この変数の値が 0 になっている場合は、プロンプトを
       出す直前に毎回チェックを行います。また変数の値が 0 以上の整数でない場合は、チェックは一切
       行いません。

       更新日時をチェックする対象のファイルは MAIL 変数で指定します。この変数にチェックしたいファ
       イルのパス名を指定しておくと、シェルはそのファイルの更新日時をチェックします。ファイルの更
       新日時が前回チェックしたときと変わっていたら、新着メールを知らせるメッセージを標準エラーに
       出力します。(ただしファイルが空のときはメッセージは出ません (POSIX 準拠モードのときを除
       く))

       複数のファイルをチェックの対象にしたい場合やメッセージを自分で指定したい場合は、MAIL 変数
       の代わりに MAILPATH 変数を使うことができます。MAILPATH 変数が設定されている場合は、MAIL 変
       数の設定は無視されます。MAILPATH 変数の値には、一つ以上のファイルのパス名をコロン (:) で区
       切って指定することができます。シェルは毎回のチェックでそれぞれのファイルの更新日時を調
       べ、ファイルが更新されていたらメッセージを表示します。メッセージを自分で指定するには、パス
       名の直後にパーセント (%) を置き、続けて表示させたいメッセージを置きます。それぞれのファイ
       ルごとに異なるメッセージを指定することができます。(パーセントをパス名とメッセージとの区切
       りではなくパス名の一部としたい場合はパーセントをバックスラッシュでクォートしてください)
       パーセントの後に指定されたメッセージは、表示の前にパラメータ展開されます。

       例えば MAILPATH 変数の値が /foo/mail%New mail!:/bar/mailbox%You've got
       mail:/baz/mail\%data だとすると、ファイル /foo/mail が更新されたときは New mail!
       が、/bar/mailbox が更新されたときは You've got mail が、/baz/mail%data が更新されたときは
       デフォルトのメッセージが表示されます。

ジョブ制御

       ジョブ制御とは、複数のコマンドを同時に実行し、必要に応じてそれらを中断・再開させる機能で
       す。シェルは、オペレーティングシステムが提供する端末の機能やプロセスグループ管理機構などを
       用いて、ジョブ制御を実現します。

       ジョブ制御が有効な時......

       •   シェルが起動する各プロセスは、パイプラインごとに共通の一意なプロセスグループに属しま
           す。すなわち、シェルが起動するコマンドはそれぞれパイプラインごとにジョブとして扱われま
           す。

       •   シェルがジョブを起動しそのジョブのプロセスが終了するのを待っている間にそのプロセスが停
           止した場合、シェルは (プロセスが実際に終了したときと同様に) 次のコマンドの処理に移りま
           す。このときシェルはジョブが停止したことを覚えているので、後でジョブを再開させることが
           できます。

       •   ジョブが同期的に実行される場合、そのジョブの実行中はそのジョブのプロセスグループが端末
           のフォアグラウンドプロセスグループになります。ジョブの実行が終了 (または停止) する
           と、再びシェルがフォアグラウンドになります。

       •   コマンド置換のコマンドを実行するサブシェルもまた独立したプロセスグループに属します。し
           かしシェルはこれをジョブとしては扱わないため、停止・再開させることはできません。

       •   シェルが対話モードの場合、プロンプトを出す前に毎回コマンド jobs -n を実行するのと同様
           にしてジョブの状態変化を報告します。

       •   非同期コマンドの標準入力が自動的に /dev/null にリダイレクトされません。(POSIX 準拠モー
           ドのときを除く)

       •   SIGTSTP シグナルを受けても、シェルは停止しません。

       •   特殊パラメータ - の値に m が含まれます。

       •   Wait 組込みコマンドで待っているジョブが終了したとき、そのことを示すメッセージを出力し
           ます。(対話モードの時のみ。POSIX 準拠モードを除く)

       ジョブ制御が無効な時、シェルが起動する各プロセスはシェルと同じプロセスグループに属します
       が、実行した非同期コマンドはそれぞれジョブ制御の対象となっていないジョブとして扱います。

       ここでジョブ制御に関連する組込みコマンドを簡単に紹介します。

       jobs
           現在シェルが管理しているジョブを表示します。

       fg および bg
           ジョブをフォアグラウンドまたはバックグラウンドで実行します。主に停止したジョブを再開さ
           せるのに使います。

       wait
           ジョブが終了 (または停止) するまで待ちます。

       disown
           ジョブの存在を忘れます。

       kill
           プロセスにシグナルを送ります。

       対話モードでジョブ制御が有効な時、シェルはプロンプトを出す直前にジョブの状態変化を報告しま
       す。これ以外のタイミングで状態変化を報告してほしい場合は、以下のオプションを指定することが
       できます。

       notify
           タイミングにかかわらず、ジョブの状態が変化したら直ちにそれを報告します。

       notify-le
           行編集を行っている最中にジョブの状態が変化したら直ちにそれを報告します。

       シェルが管理しているジョブは以下のタイミングで削除されます。

       •   ジョブの実行が終了した後、そのことを jobs 組込みコマンドやプロンプト前の自動報告で表示
           したとき

       •   Wait 組込みコマンドでジョブの終了を待ったとき

       •   Disown 組込みコマンドでジョブを削除したとき

   ジョブ ID
       いくつかの組込みコマンドでは、操作対象のジョブを指定するためにジョブ ID という以下のような
       記法を用います。

       %, %%, %+
           現在のジョブ

       %-
           前のジョブ

       %n
           ジョブ番号が n のジョブ (n は自然数)

       %string
           ジョブ名が文字列で始まるジョブ

       %?string
           ジョブ名が文字列を含むジョブ

       現在のジョブ及び前のジョブとは、シェルが特定の方法で選んだジョブのことで、fg 組込みコマン
       ドなどでジョブを選択しやすくするために用意されています。現在のジョブと前のジョブは以下の規
       則を満たすように選ばれます。

       •   停止中のジョブがある場合は、現在のジョブはその中から選ばれます。

       •   現在のジョブ以外に停止中のジョブがある場合は、前のジョブはその中から選ばれます。

       •   現在のジョブと前のジョブは異なるジョブになるように選ばれます。ジョブが一つしかないとき
           はそれが現在のジョブになり、前のジョブはなくなります。

       •   現在のジョブが終了したときは、前のジョブが現在のジョブになります。これ以外に現在のジョ
           ブが変更される場合は、元の現在のジョブは前のジョブになります。

       •   フォアグラウンドで実行していたジョブが停止したときは、そのジョブは現在のジョブになりま
           す。

       Yash には、現在のジョブを選択する方針を指示するためにいくつかのオプションが用意されていま
       す。ただしこれらのオプションよりも上記の規則のほうが優先します。

       cur-async
           新しく非同期コマンドを起動したとき、それは現在のジョブになります。

       cur-bg
           Bg 組込みコマンドでジョブを再開したとき、そのジョブは現在のジョブになります。

       cur-stop
           実行中のジョブが停止したとき、そのジョブは現在のジョブになります。

       これらの規則・オプションに反しない限り、一度選ばれた現在のジョブ・前のジョブはずっと現在の
       ジョブ・前のジョブのままです。

       POSIX は現在のジョブ・前のジョブの選択方法を細かく定めていないため、他のシェルでは選び方が
       異なることがあります。

組込みコマンド

       組込みコマンドとはシェルに内蔵されたコマンドです。組込みコマンドは外部のプログラムを起動す
       ることなくシェル自身によって実行されます。

   組込みコマンドの種類
       Yash の組込みコマンドは特殊組込みコマンド・準特殊組込みコマンド・通常の組込みコマンドの三
       種類に分けられます。

       特殊組込みコマンドは他の組込みコマンドよりも特に重要なコマンドで、他のコマンドとは異なる性
       質をいくつか持っています。まず、特殊組込みコマンドは対応する外部コマンドの存在に関係なく常
       に実行されます。また特殊組込みコマンドにおける変数代入の結果はコマンドの実行が終わった後も
       残ります。さらに POSIX 準拠モードでは、特殊組込みコマンドにおいてリダイレクトエラーまたは
       代入エラーが発生した場合あるいはコマンドのオプションやオペランドの使い方が間違っている場
       合、シェルが対話モードでなければシェルは直ちに非 0 の終了ステータスで終了します。

       準特殊組込みコマンドは特殊組込みコマンドに次いで重要な組込みコマンドで、対応する外部コマン
       ドの存在に関係なく常に実行されます。その他の点では準特殊組込みコマンドは通常の組込みコマン
       ドと同じです。

       外部コマンドとして実装可能な組込みコマンドや POSIX に規定されていない組込みコマンドを含
       む、重要度の低い組込みコマンドは通常の組込みコマンドです。POSIX 準拠モードでは、通常の組込
       みコマンドは対応する外部コマンドが PATH 変数の検索で見つかった場合のみ実行されます。

   コマンドの引数の構文
       ここでは組込みコマンドの引数に関する一般的な規則について説明します。Yash の組込みコマンド
       の引数の指定・解釈の仕方は、他に断りがない限りこの規則に従います。

       コマンドの引数は、オプションとオペランドの二種類に分けられます。オプションはハイフン (-)
       で始まる引数で、主にコマンドの動作を変更するのに使われます。オプションの中にはそれに対応す
       る引数をとるものもあります。オペランドはオプション以外の引数で、主にコマンドが処理を行う対
       象を指定するのに使われます。

       一つのコマンドに複数のオプションを与える場合、原則としてそれらのオプションの順序はコマンド
       の動作に影響しません。しかしオペランドの順序には意味があります。

       オプションには一文字のオプションと長いオプションとがあります。一文字のオプションは英数字一
       文字によって識別されるオプションです。長いオプションはもっと長い文字列によって識別されるオ
       プションです。POSIX 規格は一文字のオプションについてしか規定していないため、POSIX 準拠モー
       ドでは長いオプションは使えません。

       一文字のオプションは、一つのハイフンと一文字の英数字からなります。例えば -a は一文字のオプ
       ションです。引数をとるオプションでは、コマンドに与えられた引数の並びの中でそのオプションの
       直後に位置している引数がそのオプションに対する引数とみなされます。

       例4 Set 組込みコマンドと一文字のオプション

       Set 組込みコマンドにおいて、-m は引数をとらない一文字のオプション、-o は引数をとる一文字の
       オプションです。

       •   set -o errexit -mset -oerrexit -m

       この二つの例では、errexit-o オプションに対する引数となります。

       上の二つ目の例では、-o オプションとそれに対する引数が一つのコマンドライン引数になっていま
       す。POSIX はこのような書き方は避けなければならないと定めており、POSIX に従うアプリケーショ
       ンは必ず一つ目の例のようにオプションとそれに対する引数を別々のコマンドライン引数として与え
       なければなりません。しかし yash はどちらの指定の仕方も受け付けるようになっています。

       引数をとらない複数の一文字のオプションは、一つにまとめて書くことができます。例えば -a, -b,
       -c という三つのオプションは -abc と書けます。

       長いオプションは、二つのハイフンとオプション名を表す文字列からなります。例えば
       --long-option は長いオプションです。オプション名は他と紛らわしくない限り末尾を省略できま
       す。例えば他に --long で始まる長いオプションがなければ、--long-option--long と省略でき
       ます。引数をとるオプションでは、一文字のオプションの場合と同様に、オプションの直後にあるコ
       マンドライン引数がそのオプションに対する引数とみなされます。あるいは、オプション名の後に等
       号 (=) で区切って直接引数を与えることもできます。

       例5 Fc 組込みコマンドと長いオプション

       Fc 組込みコマンドにおいて、--quiet は引数をとらない長いオプション、--editor は引数をとる長
       いオプションです。

       •   fc --editor vi --quietfc --editor=vi --quiet

       この二つの例では、vi--editor オプションに対する引数となります。

       オプション (およびオプションに対する引数) 以外の引数は、全てオペランドとみなされま
       す。POSIX は、オペランドは全てオプションより後に書かなければならないと定めています。そのた
       め POSIX 準拠モードでは、最初のオペランドより後にある引数は (たとえそれがオプションである
       ように見えても) 全てオペランドとして解釈します。POSIX 準拠モードでないときは、オペランドの
       後にオプションを書いても構いません。

       POSIX 準拠モードであるかどうかにかかわらず、ハイフン二つからなる引数 (--) はオプションとオ
       ペランドとの区切りとして使えます。この区切り以降の全てのコマンドライン引数はオペランドとし
       て解釈されるため、ハイフンで始まるオペランドを正しく指定できます。

       例6 Set 組込みコマンドのオプションとオペランドset -a -b -- -c -d

       この例では、-a-b がオプションで、-c-d がオペランドとなります。区切り (--) 自体はオ
       プションでもオペランドでもありません。

       POSIX 準拠モードであるかどうかにかかわらず、ハイフン一つからなる引数 (-) は常にオペランド
       とみなされます。

行編集

       行編集機能は、対話モードのシェルにコマンドを入力する際に使える、コマンドの簡易編集機能で
       す。行編集機能は、コマンドを編集するための簡単なエディタとして働きます。行編集機能はコマン
       ド履歴とも連携しており、fc コマンドを使ってエディタを起動する代わりに行編集で直接コマンド
       を編集・再実行できます。

       行編集には複数の編集モードがあり、モードごとにキー操作の割り当てが異なります。行編集の有
       効・無効を切り替えたりモードを選択したりするには、set 組込みコマンドで編集モードに対応する
       オプションを設定します。あるモードに対応するオプションを有効にすると、そのモードの行編集が
       有効になります (同時に他のモードのオプションは自動的に無効になります)。現在有効になってい
       るモードのオプションを無効にすると、行編集は無効になります。現在 yash が搭載している編集
       モードは vi 風と emacs 風の二種類で、それぞれ対応するオプションは -o vi-o emacs です。

       シェルが対話モードで起動したとき、標準入力と標準エラーがともに端末ならば、vi 風行編集が自
       動的に有効になります。

       行編集は、標準入力と標準エラーがともに端末のときだけ使えます。この条件が満たされていないと
       きは、行編集は働きません。行編集が働くとき、シェルは termios インタフェースを使用して端末
       の入出力モードを一時的に変更し、terminfo インタフェースを使用して入力されたキーの判別など
       を行います。

   行編集のオプション
       行編集を有効にし編集モードを選択するオプションとして、以下のオプションが set 組込みコマン
       ドで設定できます。

       vi
           Vi 風編集モードを有効にします

       emacs
           Emacs 風編集モードを有効にします

       この他に、行編集に関わるものとして以下のオプションが設定できます。

       le-always-rp
           このオプションが無効な時は、長いコマンドを入力してコマンドが右プロンプトに達すると、右
           プロンプトは見えなくなります。このオプションが有効な時は、右プロンプトは見えなくなる代
           わりに下に移動します。

       le-comp-debug
           補完を行う際にデバッグ用の情報を出力します

       le-conv-meta
           Terminfo データベースで得られた情報を無視し、入力の 8 ビット目を常に meta-key フラグと
           みなします。

       le-no-conv-meta
           Terminfo データベースで得られた情報を無視し、入力の 8 ビット目を他のビットと同様に扱い
           ます。

           Le-conv-meta オプションと le-no-conv-meta オプションは片方しか有効にできません (片方を
           有効にするともう片方は自動的に無効になります)。どちらも無効な時は terminfo データベー
           スの情報に従って 8 ビット目を meta-key とみなすかどうか判断します。

       le-prompt-sp
           このオプションが有効な時、シェルはプロンプトを出力する前に、プロンプトが必ず行頭に来る
           ようにカーソルを移動するための特殊な文字列を出力します。

           このオプションは最初から有効になっています。

       le-visible-bell
           シェルが警告を発する際、警告音を鳴らす代わりに端末を点滅させます。

   編集モード
       Vi 風編集モードは vi に似たキー操作で編集を行う編集モードです。Vi 風編集モードでは、挿入
       モードとコマンドモードの二つのモードを適宜切り替えて編集を行います。編集が始まるときはモー
       ドは必ず挿入モードになっています。挿入モードでは入力した文字が基本的にそのままバッファに挿
       入されます。コマンドモードでは入力した文字はカーソルを移動したり文字を消去したりするコマン
       ドとして解釈されます。

       Emacs 風編集モードは emacs に似たキー操作で編集を行う編集モードです。入力した文字は基本的
       にそのままバッファに挿入されますが、コマンドとして解釈される一部のキー操作が vi 風編集モー
       ドの挿入モードと異なります。

       これらのモードの他に、コマンドの検索の際に用いる検索モードが vi 風と emacs 風とそれぞれに
       あります。

   行編集コマンド
       行編集中に入力された文字は全て以下の行編集コマンドのいずれかとして解釈されます。コマンドと
       キーの対応は bindkey 組込みコマンドで変更できます (検索モードを除く)。

       以下の一覧には各コマンドに対応するキー入力の初期設定も示してあります。なお、 『vi-insert』
       は vi 風編集モードの挿入モードを、 『vi-command』 は vi 風編集モードのコマンドモードを、
       『vi-search』 は vi 風編集モードの検索モードを、 『emacs』 は emacs 風編集モードを、
       『emacs-search』 は emacs 風編集モードの検索モードを示します。

       コマンドの中には引数を指定することでその動作を変更できるものがあります。例えば
       forward-char コマンドは通常はカーソルを一文字分前に移動しますが、引数を指定するとその引数
       の文字数分だけカーソルを移動します。引数は、目的のコマンドの直前に digit-argument コマンド
       を使うことで指定できます。

       基本的な編集コマンド
           noop
               何も行いません。

               vi-command
                   \^[

           alert
               警告音を発しまたは端末を点滅させます。

           self-insert
               入力した文字を現在のカーソルの位置に挿入します。(エスケープシーケンスによるエス
               ケープの対象となる文字は挿入できません)

               vi-insert, emacs
                   \\

           insert-tab
               タブを現在のカーソルの位置に挿入します。

               emacs
                   \^[\^I

           expect-verbatim
               このコマンドの直後に入力する一文字を現在のカーソル位置に挿入します。このコマンドを
               使うと self-insert コマンドで入力できない文字も入力できます (ナル文字 '\0' を除
               く)。

               vi-insert, vi-search, emacs-search
                   \^V

               emacs
                   \^Q, \^V

           digit-argument
               このコマンドは数字またはハイフンの入力に対してのみ有効です。入力した数字を次のコマ
               ンドへの引数として受け付けます (ハイフンの場合は符号を反転します)。

               Digit-argument コマンドを連続して使うことで複数桁の引数を指定できます。例えば vi
               風編集モードのコマンドモードで 12l と入力すると、forward-char コマンドに引数 12 を
               与えたことになります (すなわちカーソルが左に 12 文字分移動します)。

               vi-command
                   1, 2, 3, 4, 5, 6, 7, 8, 9

               emacs
                   \^[0, \^[1, \^[2, \^[3, \^[4, \^[5, \^[6, \^[7, \^[8, \^[9, \^[-,

           bol-or-digit
               引数がない場合は beginning-of-line コマンドと同じように、引数がある場合は
               digit-argument コマンドと同じように動作します。

               vi-command
                   0

           accept-line
               行編集を終了し、現在のバッファの内容をシェルへの入力として与えます。行の末尾には自
               動的に改行が付け加わります。

               vi-insert, vi-command, emacs, emacs-search
                   \^J, \^M

           abort-line
               行編集を中止し、空の入力をシェルに与えます。

               vi-insert, vi-command, vi-search, emacs, emacs-search
                   \!, \^C

           eof
               シェルに入力の終わりを知らせます (これによりシェルは終了します)。

           eof-if-empty
               バッファが空ならば、行編集を終了し、シェルに入力の終わりを知らせます (これにより
               シェルは終了します)。バッファが空でなければ、alert コマンドと同じ動作をします。

               vi-insert, vi-command
                   \#, \^D

           eof-or-delete
               バッファが空ならば、行編集を終了し、シェルに入力の終わりを知らせます (これにより
               シェルは終了します)。バッファが空でなければ、delete-char コマンドと同じ動作をしま
               す。

               emacs
                   \#, \^D

           accept-with-hash
               引数が与えられていないかバッファの最初の文字が # でなければ、バッファの最初に # を
               挿入します。そうでなければバッファの最初の # を削除します。いずれの場合も、その後
               accept-line コマンドと同じ動作をします。

               vi-command
                   #

               emacs
                   \^[#

           setmode-viinsert
               編集モードを vi 風編集モードの挿入モードに変更します。

               vi-command
                   i, \I

           setmode-vicommand
               編集モードを vi 風編集モードのコマンドモードに変更します。

               vi-insert
                   \^[

           setmode-emacs
               編集モードを emacs 風編集モードに変更します。

           expect-char, abort-expect-char
               これは find-char コマンドなどを実装するために yash 内部で使われているコマンド
               で、直接使用しても意味はありません。

           redraw-all
               行編集のプロンプトやバッファを端末に表示しなおします。

               vi-insert, vi-command, vi-search, emacs, emacs-search
                   \^L

           clear-and-redraw-all
               端末の表示をクリアし、行編集のプロンプトやバッファを端末に表示しなおします。

       移動コマンド
           移動コマンドはカーソルを移動させるコマンドです。ほとんどの移動コマンドは引数を与えるこ
           とでそのコマンドを引数の回数だけ実行するのと同じように動作させられます。例えば
           forward-char コマンドに引数 4 を与えると、カーソルを 4 文字先に進めます。

           以下、bigword とは一文字以上の連続した空白でない文字をいい、semiword とは一文字以上の
           連続した空白でも句読点でもない文字をいい、emacsword とは一文字以上の連続した英数字をい
           います。また viword とは以下のいずれかをいいます

           •   一文字以上の連続した英数字または下線 (_)

           •   一文字以上の連続した、英数字でも下線でも空白でもない文字

           以下に移動コマンドの一覧を示します。

           forward-char
               カーソルを次の文字に移動します。

               vi-insert
                   \R

               vi-command
                   l, (space), \R

               emacs
                   \R, \^F

           backward-char
               カーソルを前の文字に移動します。

               vi-insert
                   \L

               vi-command
                   h, \B, \L, \?, \^H

               emacs
                   \L, \^B

           forward-bigword
               カーソルを次の bigword に移動します。

               vi-command
                   W

           end-of-bigword
               カーソルを bigword の終わりまで移動します。

               vi-command
                   E

           backward-bigword
               カーソルを前の bigword に移動します。

               vi-command
                   B

           forward-semiword
               カーソルを次の semiword に移動します。

           end-of-semiword
               カーソルを semiword の終わりまで移動します。

           backward-semiword
               カーソルを前の semiword に移動します。

           forward-viword
               カーソルを次の viword に移動します。

               vi-command
                   w

           end-of-viword
               カーソルを viword の終わりまで移動します。

               vi-command
                   e

           backward-viword
               カーソルを前の viword に移動します。

               vi-command
                   b

           forward-emacsword
               カーソルを次の emacsword に移動します。

               emacs
                   \^[f, \^[F

           backward-emacsword
               カーソルを前の emacsword に移動します。

               emacs
                   \^[b, \^[B

           beginning-of-line
               カーソルをバッファの先頭に移動します。

               vi-insert, vi-command
                   \H

               emacs
                   \H, \^A

           end-of-line
               カーソルをバッファの末尾に移動します。

               vi-insert
                   \E

               vi-command
                   $, \E

               emacs
                   \E, \^E

           go-to-column
               カーソルをバッファ内の n 文字目に移動します。ただし n は引数です (引数が与えられて
               いない場合は 1)。

               vi-command
                   |

           first-nonblank
               カーソルをバッファ内の最初の空白でない文字に移動します。

               vi-command
                   ^

           find-char
               このコマンドの直後に入力した文字がある位置までカーソルを進めます。

               vi-command
                   f

               emacs
                   \^]

           find-char-rev
               このコマンドの直後に入力した文字がある位置までカーソルを戻します。

               vi-command
                   F

               emacs
                   \^[\^]

           till-char
               このコマンドの直後に入力した文字がある位置の直前までカーソルを進めます。

               vi-command
                   t

           till-char-rev
               このコマンドの直後に入力した文字がある位置の直後までカーソルを戻します。

               vi-command
                   T

           refind-char
               前回実行した find-char, find-char-rev, till-char, till-char-rev コマンドを再実行し
               ます。

               vi-command
                   ;

           refind-char-rev
               前回実行した find-char, find-char-rev, till-char, till-char-rev コマンドを、カーソ
               ルの進む向きを逆にして再実行します。

               vi-command
                   ,

       編集コマンド
           編集コマンドはバッファの内容を変更するコマンドです。ほとんどの編集コマンドは引数を与え
           ることでそのコマンドを引数の回数だけ実行するのと同じように動作させられます。

           名前に 『kill』 が付くコマンドで削除した文字列はキルリングという場所に保管され、後で
           put などのコマンドでバッファに戻すことができます。

           以下に編集コマンドの一覧を示します。

           delete-char
               カーソルのところにある文字を削除します。引数を与えた場合は kill-char コマンドと同
               じ動作をします。

               vi-insert, emacs
                   \X

           delete-bigword
               カーソルのところにある bigword を削除します。引数を与えた場合は kill-bigword コマ
               ンドと同じ動作をします。

           delete-semiword
               カーソルのところにある semiword を削除します。引数を与えた場合は kill-semiword コ
               マンドと同じ動作をします。

           delete-viword
               カーソルのところにある viword を削除します。引数を与えた場合は kill-viword コマン
               ドと同じ動作をします。

           delete-emacsword
               カーソルのところにある emacsword を削除します。引数を与えた場合は kill-emacsword
               コマンドと同じ動作をします。

           backward-delete-char
               カーソルの前にある文字を削除します。引数を与えた場合は backward-kill-char コマンド
               と同じ動作をします。

               vi-insert, emacs
                   \B, \?, \^H

           backward-delete-bigword
               カーソルの前にある bigword を削除します。引数を与えた場合は backward-kill-bigword
               コマンドと同じ動作をします。

           backward-delete-semiword
               カーソルの前にある semiword を削除します。引数を与えた場合は
               backward-kill-semiword コマンドと同じ動作をします。

               vi-insert
                   \^W

           backward-delete-viword
               カーソルの前にある viword を削除します。引数を与えた場合は backward-kill-viword コ
               マンドと同じ動作をします。

           backward-delete-emacsword
               カーソルの前にある emacsword を削除します。引数を与えた場合は
               backward-kill-emacsword コマンドと同じ動作をします。

           delete-line
               バッファの内容を全て削除します。

           forward-delete-line
               カーソル以降の全ての文字を削除します。

           backward-delete-line
               カーソルより前の全ての文字を削除します。

               vi-insert
                   \$, \^U

           kill-char
               カーソルのところにある文字を削除し、キルリングに保管します。

               vi-command
                   x, \X

           kill-bigword
               カーソルのところにある bigword を削除し、キルリングに保管します。

           kill-semiword
               カーソルのところにある semiword を削除し、キルリングに保管します。

           kill-viword
               カーソルのところにある viword を削除し、キルリングに保管します。

           kill-emacsword
               カーソルのところにある emacsword を削除し、キルリングに保管します。

               emacs
                   \^[d, \^[D

           backward-kill-char
               カーソルの前にある文字を削除し、キルリングに保管します。

               vi-command
                   X

           backward-kill-bigword
               カーソルの前にある bigword を削除し、キルリングに保管します。

               emacs
                   \^W

           backward-kill-semiword
               カーソルの前にある semiword を削除し、キルリングに保管します。

           backward-kill-viword
               カーソルの前にある viword を削除し、キルリングに保管します。

           backward-kill-emacsword
               カーソルの前にある emacsword を削除し、キルリングに保管します。

               emacs
                   \^[\B, \^[\?, \^[\^H

           kill-line
               バッファの内容を全て削除し、キルリングに保管します。

           forward-kill-line
               カーソル以降の全ての文字を削除し、キルリングに保管します。

               emacs
                   \^K

           backward-kill-line
               カーソルより前の全ての文字を削除し、キルリングに保管します。

               emacs
                   \$, \^U, \^X\B, \^X\?

           put-before
               最後にキルリングに保管した文字列をカーソルの直前に挿入します。カーソルは挿入した文
               字列の最後の文字のところに移動します。

               vi-command
                   P

           put
               最後にキルリングに保管した文字列をカーソルの直後に挿入します。カーソルは挿入した文
               字列の最後の文字のところに移動します。

               vi-command
                   p

           put-left
               最後にキルリングに保管した文字列をカーソルの直前に挿入します。カーソルは挿入した文
               字列の直後に移動します。

               emacs
                   \^Y

           put-pop
               このコマンドは put-before, put, put-left, put-pop コマンドの直後にだけ使えます。こ
               のコマンドは直前のコマンドでキルリングから挿入した文字列を削除し、代わりにその文字
               列の前にキルリングに保管した文字列を挿入します。

               emacs
                   \^[y, \^[Y

           undo
               直前の編集コマンドを取り消し、バッファの内容を前の状態に戻します。

               vi
                   u

               emacs
                   \^_, \^X\$, \^X\^U

           undo-all
               全ての編集コマンドを取り消し、バッファの内容を初期状態に戻します。

               vi
                   U

               emacs
                   \^[\^R, \^[r, \^[R

           cancel-undo
               undo, undo-all による編集コマンドの取り消しを取り消し、バッファの内容を復元しま
               す。

               vi
                   \^R

           cancel-undo-all
               undo, undo-all による編集コマンドの取り消しを全て取り消し、バッファの内容を復元し
               ます。

           redo
               直前の編集コマンドを繰り返します。

               vi-command
                   .

       補完コマンド
           complete
               現在のカーソル位置で補完を行います。補完候補が複数ある場合はその一覧を表示します。

           complete-next-candidate
               補完候補の一覧を既に表示している場合は一覧の中から次の候補を選択します。それ以外の
               場合は complete コマンドと同じ動作をします。

               vi-insert, emacs
                   \^I

           complete-prev-candidate
               補完候補の一覧を既に表示している場合は一覧の中から前の候補を選択します。それ以外の
               場合は complete コマンドと同じ動作をします。

               vi-insert, emacs
                   \bt

           complete-next-column
               補完候補の一覧を既に表示している場合は一覧の中から次の列の最初の候補を選択しま
               す。それ以外の場合は complete コマンドと同じ動作をします。

           complete-prev-column
               補完候補の一覧を既に表示している場合は一覧の中から前の列の最初の候補を選択しま
               す。それ以外の場合は complete コマンドと同じ動作をします。

           complete-next-page
               補完候補の一覧を既に表示している場合は一覧の中から次のページの最初の候補を選択しま
               す。それ以外の場合は complete コマンドと同じ動作をします。

           complete-prev-page
               補完候補の一覧を既に表示している場合は一覧の中から前のページの最初の候補を選択しま
               す。それ以外の場合は complete コマンドと同じ動作をします。

           complete-list
               現在のカーソル位置で補完を行います。引数を指定しない場合、補完候補の一覧を表示しま
               す。引数を指定すると、その番号の候補で補完内容を確定します。

               emacs
                   \^[?, \^[=

           complete-all
               現在のカーソル位置で補完を行い、カーソル位置にある単語をすべての補完候補で置き換え
               ます。

               emacs
                   \^[*

           complete-max
               現在のカーソル位置で補完を行い、各補完候補の最長共通先頭部分をカーソル位置に挿入し
               ます。

           clear-candidates
               補完候補の一覧を消去します。

       Vi 固有のコマンド
           vi-replace-char
               カーソルのところにある文字を、このコマンドの直後に入力した文字に置き換えます。

               vi-command
                   r

           vi-insert-beginning
               カーソルをバッファの先頭に移動したのち、setmode-viinsert コマンドと同じ動作をしま
               す。

               vi-command
                   I

           vi-append
               カーソルを次の文字に移動したのち、setmode-viinsert コマンドと同じ動作をします。

               vi-command
                   I

           vi-append-to-eol
               カーソルをバッファの末尾に移動したのち、setmode-viinsert コマンドと同じ動作をしま
               す。

               vi-command
                   A

           vi-replace
               Setmode-viinsert コマンドと同じ動作をしますが、同時に上書きモードを有効にしま
               す。上書きモードでは、self-insert コマンドは文字を挿入する代わりにカーソルのところ
               にある文字を置き換えます。上書きモードは編集モードを変更するまで有効です。

               vi-command
                   R

           vi-switch-case
               このコマンドの直後には移動コマンドを入力する必要があります。移動コマンドが動かした
               カーソルの範囲にある文字の大文字と小文字を入れ替えます。

           vi-switch-case-char
               カーソルのところにある文字の大文字と小文字を入れ替えて、カーソルを次の文字に移動し
               ます。

               vi-command
                   ~

           vi-yank
               このコマンドの直後には移動コマンドを入力する必要があります。移動コマンドが動かした
               カーソルの範囲にある文字をキルリングに保管します。

               vi-command
                   y

           vi-yank-to-eol
               カーソルの位置からバッファの末尾までにある文字をキルリングに保管します。

               vi-command
                   Y

           vi-delete
               このコマンドの直後には移動コマンドを入力する必要があります。移動コマンドが動かした
               カーソルの範囲にある文字を削除し、キルリングに保管します。

               vi-command
                   d

           vi-delete-to-eol
               カーソルの位置からバッファの末尾までにある文字を削除し、キルリングに保管します。

               vi-command
                   D

           vi-change
               このコマンドの直後には移動コマンドを入力する必要があります。移動コマンドが動かした
               カーソルの範囲にある文字を削除し、その後編集モードを vi 風編集モードの挿入モードに
               変更します。

               vi-command
                   c

           vi-change-to-eol
               カーソルの位置からバッファの末尾までにある文字を削除し、その後編集モードを vi 風編
               集モードの挿入モードに変更します。 Delete the characters from the current cursor
               position to the end of the line and switch to the vi insert mode.

               vi-command
                   C

           vi-change-line
               バッファの内容を全て削除し、その後編集モードを vi 風編集モードの挿入モードに変更し
               ます。

               vi-command
                   S

           vi-yank-and-change
               Vi-change コマンドと同様ですが、削除した文字列はキルリングに補完されます。

           vi-yank-and-change-to-eol
               Vi-change-to-eol コマンドと同様ですが、削除した文字列はキルリングに補完されます。

           vi-yank-and-change-line
               Vi-change-line コマンドと同様ですが、削除した文字列はキルリングに補完されます。

           vi-substitute
               カーソルのところにある文字を削除しキルリングに保管した後、編集モードを vi 風編集
               モードの挿入モードに変更します。

               vi-command
                   s

           vi-append-last-bigword
               コマンド履歴の中で最も新しいコマンドにおける最後の bigword を、空白文字に続けて
               カーソルの位置の直後に挿入します。引数 n を与えたときは最後の bigword の代わりに n
               番目の bigword を挿入します。その後、setmode-viinsert コマンドと同じ動作をします。

               vi-command
                   _

           vi-exec-alias
               このコマンドの直後に入力した文字を c とすると、_c という名前のエイリアスの内容を
               シェルへの入力とみなして行編集コマンドとして解釈・実行します。

               vi-command
                   @

           vi-edit-and-accept
               エディタとして vi を起動し、バッファの内容を編集させます。エディタが終了すると編集
               後の内容をバッファに反映した後 accept-line コマンドと同じ動作をします。ただしエ
               ディタの終了ステータスが 0 でないときは何も行いません。

               vi-command
                   v

           vi-complete-list
               Complete-list コマンドと同様ですが、候補を確定したとき編集モードを vi 風編集モード
               の挿入モードに変更します。

               vi-command
                   =

           vi-complete-all
               Complete-all コマンドと同様ですが、単語を置き換えた後、編集モードを vi 風編集モー
               ドの挿入モードに変更します。

               vi-command
                   *

           vi-complete-max
               Complete-max コマンドと同様ですが、候補を挿入した後、編集モードを vi 風編集モード
               の挿入モードに変更します。

               vi-command
                   \\

           vi-search-forward
               順方向の履歴検索を開始します。編集モードを vi 風編集モードの検索モードに変更しま
               す。

               vi-command
                   ?

           vi-search-backward
               逆方向の履歴検索を開始します。編集モードを vi 風編集モードの検索モードに変更しま
               す。

               vi-command
                   /

       Emacs 固有のコマンド
           emacs-transpose-chars
               カーソルの前にある文字を右に移動します。

               emacs
                   \^T

           emacs-transpose-words
               カーソルの前にある emacsword を右に移動します。

               emacs
                   \^[t, \^[T

           emacs-downcase-word
               カーソルの後にある emacsword を小文字に変換します。

               emacs
                   \^[l, \^[L

           emacs-upcase-word
               カーソルの後にある emacsword を大文字に変換します。

               emacs
                   \^[u, \^[U

           emacs-capitalize-word
               カーソルの後にある emacsword をキャピタライズします (各単語の頭文字だけ大文字にす
               る)。

               emacs
                   \^[c, \^[u

           emacs-delete-horizontal-space
               カーソルの前後にある空白を削除します。引数を与えるとカーソルの前にある空白を削除し
               ます。

               emacs
                   \^[\\

           emacs-just-one-space
               カーソルの前後にある空白の個数を一つに調整します。引数を与えるとその引数の数だけ空
               白を残します。

               emacs
                   \^[ (エスケープの後に空白文字)

           emacs-search-forward
               順方向の履歴検索を開始します。編集モードを emacs 風編集モードの検索モードに変更し
               ます。

               emacs
                   \^S

           emacs-search-backward
               順方向の履歴検索を開始します。編集モードを emacs 風編集モードの検索モードに変更し
               ます。

               emacs
                   \^R

       コマンド履歴関連のコマンド
           oldest-history
               コマンド履歴の中で最も古いコマンドに移動します。引数を与えるとそれを履歴番号とみな
               してその番号のコマンドに移動します。カーソルの位置は変わりません。

           newest-history
               コマンド履歴の中で最も新しいコマンドに移動します。引数を与えるとそれを履歴番号とみ
               なしてその番号のコマンドに移動します。カーソルの位置は変わりません。

           return-history
               コマンド履歴のどのコマンドにも対応しない新規バッファに移動します。引数を与えるとそ
               れを履歴番号とみなしてその番号のコマンドに移動します。カーソルの位置は変わりませ
               ん。

           oldest-history-bol
               コマンド履歴の中で最も古いコマンドに移動します。引数を与えるとそれを履歴番号とみな
               してその番号のコマンドに移動します。カーソルはバッファの先頭に移動します。

               vi-command
                   G

           newest-history-bol
               コマンド履歴の中で最も新しいコマンドに移動します。引数を与えるとそれを履歴番号とみ
               なしてその番号のコマンドに移動します。カーソルはバッファの先頭に移動します。

           return-history-bol
               コマンド履歴のどのコマンドにも対応しない新規バッファに移動します。引数を与えるとそ
               れを履歴番号とみなしてその番号のコマンドに移動します。カーソルはバッファの先頭に移
               動します。

               vi-command
                   g

           oldest-history-eol
               コマンド履歴の中で最も古いコマンドに移動します。引数を与えるとそれを履歴番号とみな
               してその番号のコマンドに移動します。カーソルはバッファの末尾に移動します。

               emacs
                   \^[<

           newest-history-eol
               コマンド履歴の中で最も新しいコマンドに移動します。引数を与えるとそれを履歴番号とみ
               なしてその番号のコマンドに移動します。カーソルはバッファの末尾に移動します。

           return-history-eol
               コマンド履歴のどのコマンドにも対応しない新規バッファに移動します。引数を与えるとそ
               れを履歴番号とみなしてその番号のコマンドに移動します。カーソルはバッファの末尾に移
               動します。

               emacs
                   \^[>

           next-history
               コマンド履歴の中で次のコマンドに移動します。カーソルの位置は変わりません。

           prev-history
               コマンド履歴の中で前のコマンドに移動します。カーソルの位置は変わりません。

           next-history-bol
               コマンド履歴の中で次のコマンドに移動します。カーソルはバッファの先頭に移動します

               vi-command
                   j, +, \D, \^N

           prev-history-bol
               コマンド履歴の中で前のコマンドに移動します。カーソルはバッファの先頭に移動します

               vi-command
                   k, -, \U, \^P

           next-history-eol
               コマンド履歴の中で次のコマンドに移動します。カーソルはバッファの末尾に移動します

               vi-insert, emacs
                   \D, \^N

           prev-history-eol
               コマンド履歴の中で前のコマンドに移動します。カーソルはバッファの末尾に移動します

               vi-insert, emacs
                   \U, \^P

           search-again
               最後に行ったコマンド履歴検索をもう一度行います。

               vi-command
                   n

           search-again-rev
               最後に行ったコマンド履歴検索を方向を逆にしてもう一度行います。

               vi-command
                   N

           search-again-forward
               最後に行ったコマンド履歴検索を順方向にもう一度行います。

           search-again-backward
               最後に行ったコマンド履歴検索を逆方向にもう一度行います。

           beginning-search-forward
               コマンド履歴を順方向に検索し、バッファの先頭から現在のカーソル位置までの間にある文
               字列が同じ次のコマンドに移動します。カーソル位置は変わりません。

           beginning-search-backward
               コマンド履歴を逆方向に検索し、バッファの先頭から現在のカーソル位置までの間にある文
               字列が同じ前のコマンドに移動します。カーソル位置は変わりません。

       コマンド履歴検索モードのコマンド
           srch-self-insert
               入力した文字を検索用バッファに挿入します。(エスケープシーケンスによるエスケープの
               対象となる文字は挿入できません)

               vi-search, emacs-search
                   \\

           srch-backward-delete-char
               検索用バッファの最後の一文字を削除します。検索用バッファが空の場合は:

               •   vi 風編集モードでは srch-abort-search コマンドと同じ動作をします。

               •   emacs 風編集モードでは alert コマンドと同じ動作をします。

               vi-search, emacs-search
                   \B, \?, \^H

           srch-backward-delete-line
               検索用バッファの内容を全て削除します。

               vi-search, emacs-search
                   \$, \^U

           srch-continue-forward
               現在表示している暫定検索結果の次の結果を順方向に探します。

               emacs-search
                   \^S

           srch-continue-backward
               現在表示している暫定検索結果の次の結果を逆方向に探します。

               emacs-search
                   \^R

           srch-accept-search
               検索を終了し、現在表示している暫定検索結果を確定します。検索結果に移動します。

               vi-search
                   \^J, \^M

               emacs-search
                   \^J, \^[

           srch-abort-search
               検索を中止し、検索を開始する前の状態に戻ります。

               vi-search
                   \^[

               emacs-search
                   \^G

   エスケープシーケンス
       Bindkey コマンドで行編集のキー設定を表示・設定する際、ファンクションキーなどの特殊なキーは
       エスケープシーケンスで表わします。エスケープシーケンスは全てバックスラッシュ (\) で始まり
       ます。またバックスラッシュそのものもエスケープの対象です。エスケープシーケンスに対するキー
       の割り当ては以下の通りです。

       \\
           バックスラッシュ (\)

       \B
           Backspace

       \D
           ↓矢印キー

       \E
           End

       \H
           Home

       \I
           Insert (Insert-char, Enter-insert-mode)

       \L
           ←矢印キー

       \N
           Page-down (Next-page)

       \P
           Page-up (Previous-page)

       \R
           →矢印キー

       \U
           ↑矢印キー

       \X
           Delete

       \!
           INTR

       \#
           EOF

       \$
           KILL

       \?
           ERASE

       \^@
           Ctrl + @

       \^A, \^B, ..., \^Z
           Ctrl + A, Ctrl + B, ..., Ctrl + Z

           ※ Ctrl + I は Tab、Ctrl + J は Newline、Ctrl + M は Carriage-return です。

       \^[
           Ctrl + [ (Escape)

       \^\
           Ctrl + \

       \^]
           Ctrl + ]

       \^^
           Ctrl + ^

       \^_
           Ctrl + _

       \^?
           Ctrl + ? (Delete)

       \F00, \F01, ..., \F63
           F0, F1, ..., F63

       \a1
           キーパッドの左上キー

       \a3
           キーパッドの右上キー

       \b2
           キーパッドの中央キー

       \bg
           Beginning

       \bt
           Back-tab

       \c1
           キーパッドの左下キー

       \c3
           キーパッドの右下キー

       \ca
           Clear-all-tabs

       \cl
           Close

       \cn
           Cancel

       \co
           Command

       \cp
           Copy

       \cr
           Create

       \cs
           Clear-screen または erase

       \ct
           Clear-tab

       \dl
           Delete-line

       \ei
           Exit-insert-mode

       \el
           Clear-to-end-of-line

       \es
           Clear-to-end-of-screen

       \et
           Enter (Send)

       \ex
           Exit

       \fd
           Find

       \hp
           Help

       \il
           Insert-line

       \ll
           Home-down

       \me
           Message

       \mk
           Mark

       \ms
           マウスイベント

       \mv
           Move

       \nx
           Next-object

       \on
           Open

       \op
           Options

       \pr
           Print (Copy)

       \pv
           Previous-object

       \rd
           Redo

       \re
           Resume

       \rf
           Ref (Reference)

       \rh
           Refresh

       \rp
           Replace

       \rs
           Restart

       \sf
           Scroll-forward (Scroll-down)

       \sl
           Select

       \sr
           Scroll-backward (Scroll-up)

       \st
           Set-tab

       \su
           Suspend

       \sv
           Save

       \ud
           Undo

       \SE
           Shift + End

       \SH
           Shift + Home

       \SI
           Shift + Insert

       \SL
           Shift + ←矢印キー

       \SR
           Shift + →矢印キー

       \SX
           Shift + Delete

       \Sbg
           Shift + Beginning

       \Scn
           Shift + Cancel

       \Sco
           Shift + Command

       \Scp
           Shift + Copy

       \Scr
           Shift + Create

       \Sdl
           Shift + Delete-line

       \Sel
           Shift + End-of-line

       \Sex
           Shift + Exit

       \Sfd
           Shift + Find

       \Shp
           Shift + Help

       \Smg
           Shift + Message

       \Smv
           Shift + Move

       \Snx
           Shift + Next

       \Sop
           Shift + Options

       \Spr
           Shift + Print

       \Spv
           Shift + Previous

       \Srd
           Shift + Redo

       \Sre
           Shift + Resume

       \Srp
           Shift + Replace

       \Ssu
           Shift + Suspend

       \Ssv
           Shift + Save

       \Sud
           Shift + Undo

       INTR, EOF, KILL, ERASE の四つは stty コマンドなどで設定される端末の特殊文字です。一般的な
       環境では、INTR は Ctrl + C に、EOF は Ctrl + D に、KILL は Ctrl + U に、ERASE は Ctrl + H
       または Ctrl + ? に設定されています。これら四つは他のキー入力よりも優先して認識されます。

   コマンドライン補完
       行編集でコマンドを入力している途中で Tab キーを押すことで、コマンドの名前やオプション、引
       数を補完することができます。コマンド名やファイル名を途中まで打ち込んだところで Tab キーを
       押すと、その名前に一致するコマンド名やファイル名の一覧が現れます。さらに続けて Tab キーを
       押すと、入力したい名前を一覧の中から選ぶことができます。(一致する名前が一つしかない場合
       は、一覧は現れず、直接名前がコマンドラインに入力されます。)

       補完の対象となる名前に *? などの文字が入っている場合は、そのパターンに一致する名前全て
       がコマンドラインに展開されます。(一覧による選択はできません)

       標準状態では、コマンド名を入力しているときはコマンド名が、コマンドの引数を入力しているとき
       はファイル名が補完されます。しかし補完を行う関数 (補完関数) を定義することで補完内容を変更
       することができます。

       補完動作の詳細
           シェルを起動してから初めて補完を行おうとしたとき、コマンド . -AL completion/INIT を実
           行するのと同様にして、ファイル completion/INIT をロードパスから読み込みます。ファイル
           が見つからない場合は、そのまま補完動作を続けます。(この処理は主にシェルに付属している
           補完関数を読み込むためのものですが、ロードパス内に自分で用意したファイルを置いておくこ
           とで代わりにそれを読み込ませることもできます。)

           補完は、対象に応じて以下のように行います。

           コマンド名
               関数 completion//command が定義されている場合は、それを補完関数として実行しま
               す。定義されていない場合は、入力中の単語をコマンド名として補完します。

           コマンドの引数
               関数 completion//argument が定義されている場合は、それを補完関数として実行しま
               す。定義されていない場合は、入力中の単語をファイル名として補完します。

           この他、チルダ展開におけるユーザ名やパラメータ展開におけるパラメータ名を入力していると
           きは、ユーザ名やパラメータ名が常に補完されます。(補完のしかたを変更することはできませ
           ん)

           補完関数は普通の関数と同様に (位置パラメータなしで) 実行されます。ただし、補完関数の実
           行時には以下のローカル変数が自動的に設定されます。

           IFS
               空白文字・タブ・改行の三文字 (シェル起動時のデフォルト)

           WORDS
               既に入力されているコマンド名とコマンドの引数を含む配列です。コマンド名を補完しよう
               としているときは、この配列は空になります。

           TARGETWORD
               現在補完を行おうとしている、途中まで入力されたコマンド名またはコマンドの引数です。

           補完関数の中で complete 組込みコマンドを実行することで、補完候補が生成されます。シェル
           は補完関数実行中に生成された補完候補を用いて補完を行います。

           補完関数の実行中は、端末に対して入出力を行ってはなりません (端末の表示が乱れてしまいま
           す)。スムーズな補完を行うために、補完の実行中に長い時間のかかる処理を行うのは避けてく
           ださい。

           補完の実行中は、POSIX 準拠モードが強制的に解除されます。また errexit オプションは無効
           となり、トラップは実行されません。

POSIX 準拠モード

       Yash は基本的に POSIX.1-2008 のシェルの規定に従って動作しますが、利便性や分かりやすさのた
       めに POSIX の規定とは異なる動作をする点もあります。そのため標準状態の yash は POSIX の規定
       するシェルとして供するには向きません。POSIX 準拠モードを有効にすると、yash はできる限り
       POSIX の規定通りに動作するようになります。POSIX 準拠シェルとしての互換性が必要な場面で
       は、POSIX 準拠モードを有効にしてください。

       シェルの起動時の起動時の名前が sh ならばシェルは自動的に POSIX 準拠モードになります。また
       起動時に -o posixlycorrect オプションが指定されている場合も POSIX 準拠モードになります。ま
       た起動後は、set -o posixlycorrect を実行することで POSIX 準拠モードを有効にできます。

       POSIX 準拠モードを有効にすると、yash は POSIX の規定にできるだけ従うようになるだけでな
       く、POSIX が未定義未規定と定めている場合のほとんどをエラーにするようになります。すなわ
       ち、yash 独自の拡張機能の多くは使えなくなります。具体的には、POSIX 準拠モードを有効にする
       と以下のような挙動の変化があります。

       •   シェルの起動時の初期化で読み込むスクリプトファイルが異なります。

       •   グローバルエイリアスの置換を行いません。

       •   複合コマンドのグルーピングや if 文の内容が空の場合エラーになります。

       •   For ループで展開した単語はグローバル変数として代入します。変数名はポータブルな (すなわ
           ち ASCII の範囲内の) 文字しか使えません。変数名の後に in が無い場合は do の直前にセミ
           コロンを置けません。

       •   Case 文の最初のパターンを esac にすることはできません。

       •   予約語 function を用いる形式の関数定義構文は使えません。関数名はポータブルな (すなわち
           ASCII の範囲内の) 文字しか使えません。

       •   単純コマンドでの配列の代入はできません。

       •   シェル実行中に LC_CTYPE 変数の値が変わっても、それをシェルのロケール情報に反映しませ
           ん。

       •   RANDOM 変数は使えません。

       •   チルダ展開で ~~ユーザ名 以外の形式の展開が使えません。

       •   パラメータ展開の入れ子はできません。またインデックスの指定はできません。

       •   $() で囲んだコマンド置換に含まれるコマンドは、コマンド置換が実行される時に毎回解析
           されます。

       •   数式展開で小数ならびに ++ および -- 演算子が使えません。数値でない変数は常にエラーにな
           ります。

       •   ファイルのリダイレクトで、パス名展開の結果が一つでない場合、すぐにはエラーにせず、パス
           名展開を行わなかったときと同様に扱います。

       •   ソケットリダイレクト・ヒアストリング・パイプリダイレクト・プロセスリダイレクトは使用で
           きません。

       •   単純コマンドの実行時、コマンドが見つからなくても COMMAND_NOT_FOUND_HANDLER 変数の値は
           実行しません。

       •   コマンドの検索において通常の組込みコマンドは対応する外部コマンドがないと見つかりませ
           ん。

       •   ジョブ制御が有効でも、非同期コマンドは SIGINT と SIGQUIT を無視します。また非同期コマ
           ンドの標準入力を /dev/null にリダイレクトする条件が変わります (ジョブ制御が無効のとき
           ではなく、対話モードが無効なときにリダイレクト)。

       •   いくつかの組込みコマンドで特定のオプションが使えなくなるなど挙動が変わります。

       •   対話モードでないとき、特殊組込みコマンドのオプションやオペランドの使い方が間違っている
           とシェルは直ちに終了します。また特殊組込みコマンドで代入エラーやリダイレクトエラーが発
           生したときも直ちに終了します。

       •   対話モードのプロンプトを出す前に PROMPT_COMMAND 変数の値を実行しません。PS1 変数・PS2
           変数・PS4 変数の値の解釈の仕方が違います。

       •   メールチェックにおいて、ファイルが更新されている場合はファイルが空でも新着メールメッ
           セージを出力します。

よくある質問 / 困ったときは

   デフォルトのプロンプトが簡素過ぎる
       Yashrc ファイルが無いと、yash はほとんどただの POSIX と変わりません。 サンプル yashrc を自
       分のホームディレクトリ内 (~/.yashrc) に置いてカスタマイズしてください。

   Unicode (非 ASCII) 文字を使うには?
       Unicode 文字を使えるようにするにはロケール環境変数の設定が必要です。

       既に環境変数があなたの使用したいロケールに合わせて設定されている場合は、特に何もする必要は
       ありません。現在の設定を確認するには、locale コマンドを使用してください。

           $ locale
           LANG=ja_JP.utf8
           LC_CTYPE="ja_JP.utf8"
           LC_NUMERIC="ja_JP.utf8"
           LC_TIME="ja_JP.utf8"
           LC_COLLATE="ja_JP.utf8"
           LC_MONETARY="ja_JP.utf8"
           LC_MESSAGES="ja_JP.utf8"
           LC_PAPER="ja_JP.utf8"
           LC_NAME="ja_JP.utf8"
           LC_ADDRESS="ja_JP.utf8"
           LC_TELEPHONE="ja_JP.utf8"
           LC_MEASUREMENT="ja_JP.utf8"
           LC_IDENTIFICATION="ja_JP.utf8"
           LC_ALL=

       この例の locale コマンドの出力結果は、各ロケール設定カテゴリーについて、言語が日本語、地域
       が日本、エンコーディングが UTF-8 に設定されていることを示しています。

       現在の設定が自分の使いたいロケール設定に合っていない場合は、LC_ALL 変数を以下の様に設定し
       てください。

           export LC_ALL=ja_JP.utf8

       この例とは異なる言語・地域・エンコーディングの設定を使いたい場合は、設定値を変える必要があ
       ります。詳しくは、お使いのオペレーティングシステムの説明書を参照してください。

       Yash を起動する度に同じ設定を自動的に適用するには、上記のコマンドを ~/.yashrc~/.yash_profile に書いてください。

       上記の設定をしてもなお Unicode 文字が正しく入力できない場合は、以下の行編集に関する項目を
       読んでください。

   行編集が動かない
       まず、echo $TERM を実行して出力される値が正常かどうか調べてください。値が xterm なら、おそ
       らくどんな環境でも最低限の機能は使えるはずです。 xterm-16color などの色が使えるバージョン
       や、rxvtvt100 などの他の端末機種も大概は動きます。利用可能な全ての値を列挙するには toe
       コマンドを使用してください。 お使いの端末機種に合った値を設定するのが理想ですが、yash を実
       行しようとしている環境がその端末機種に対応していない場合はうまく動かないかもしれません。そ
       の場合は、export TERM=xterm などを実行して TERM の値を変えてみてください。

       行編集自体は動いているが Unicode (非 ASCII) 文字の入力に問題がある場合は、set -o
       le-no-conv-meta を実行して le-no-conv-meta オプションを有効にしてみてください。

構文の形式的定義

       ここに yash の文法の形式的定義を示します。Yash の文法は解析表現文法で定義されます。

       Yash の文法における終端記号の集合は、yash を実行する環境が扱える任意の文字の集合 (実行文字
       集合) です (ただしナル文字 '\0' を除く)。

       以下は、yash の文法を構成する非終端記号とそれに対応する終端記号の一覧です。ただしここに挙
       げる文法の定義にはヒアドキュメントの内容とその終わりを表す行の解析のための規則は含まれてい
       ません。また POSIX 準拠モードでは構文が若干変わりますが、ここには示しません。

       CompleteCommand
           SequenceEOF

       Sequence
           N* List*

       List
           Pipeline ((&& / ||) N* Pipeline)* ListSeparator

       Pipeline
           Bang?  Command (|N* Command)*

       Command
           CompoundCommandRedirection* /

           !RFunctionDefinition /

           !R SimpleCommand

       CompoundCommand
           Subshell / Grouping / IfCommand / ForCommand / WhileCommand / CaseCommand /
           FunctionCommand

       Subshell
           (Sequence)S*

       Grouping
           LeftBraceSequenceRightBrace

       IfCommand
           IfSequenceThen Sequence (Elif Sequence Then Sequence)* (Else Sequence)?  Fi

       ForCommand
           ForNameS* Separator? (InWord* Separator)?  DoSequenceDone

       WhileCommand
           (While / Until) SequenceDo Sequence Done

       CaseCommand
           CaseWordN* In N* CaseItem* Esac

       CaseItem
           !Esac ((S*)?  Word (| S* Word)* )Sequence (;; / &Esac)

       FunctionCommand
           FunctionWord ((S* ))?  N* CompoundCommandRedirection*

       FunctionDefinition
           NameS* ( S* )N* CompoundCommandRedirection*

       SimpleCommand
           &(Word / Redirection) (Assignment / Redirection)* (Word / Redirection)*

       Assignment
           Name=Word /

           Name =(N* (Word N*)* )

       Name
           ![[:digit:]] [[:alnum:] _]+

       PortableName
           ![0-9] [0-9ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]+

       Word
           (WordElement / !SpecialChar .)+ S*

       WordElement
           \ . / ' (!' .)*  ' / "QuoteElement* " / Parameter / Arithmetic / CommandSubstitution

       QuoteElement
           \ ([$`"\] / NL) / Parameter / Arithmetic / CommandSubstitution /

           ![`"\] .

       Parameter
           $ [@*#?-$!  [:digit:]] / $PortableName / $ParameterBody

       ParameterBody
           {ParameterNumber? (ParameterName / ParameterBody / Parameter) ParameterIndex?
           ParameterMatch?  }

       ParameterNumber
           # ![+=:/%] !([-?#] })

       ParameterName
           [@*#?-$!] /

           [[:alnum:] _]+

       ParameterIndex
           [ParameterIndexWord (, ParameterIndexWord)?  ]

       ParameterIndexWord
           (WordElement / !["'],] .)+

       ParameterMatch
           :? [-+=?]  ParameterMatchWord /

           (# / ## / % / %%) ParameterMatchWord /

           (:/ / / [#%/]?)  ParameterMatchWordNoSlash (/ ParameterMatchWord)?

       ParameterMatchWord
           (WordElement / !["'}] .)*

       ParameterMatchWordNoSlash
           (WordElement / !["'/}] .)*

       Arithmetic
           $((ArithmeticBody* ))

       ArithmeticBody
           \ . / Parameter / Arithmetic / CommandSubstitution / ( ArithmeticBody ) /

           ![`()] .

       CommandSubstitution
           $(Sequence) / `CommandSubstitutionBody* `

       CommandSubstitutionBody
           \ [$`\] /

           !` .

       Redirection
           RedirectionFDRedirectionOperatorS* Word /

           RedirectionFD <(Sequence) /

           RedirectionFD >( Sequence )

       RedirectionFD
           [[:digit:]]*

       RedirectionOperator
           < / <> / > / >| / >> / >>| / <& / >& / << / <<- / <<<

       ListSeparator
           Separator / &N* /

           &) /

           &;;

       Separator
           ;N* / N+ / EOF

       N
           S* NL

       S
           [[:blank:]] / Comment

       Comment
           # (!NL .)*

       R
           Bang / LeftBrace / RightBrace / Case / Do / Done / Elif / Else / Esac / Fi / For / If
           / In / Then / Until / While

       Bang
           !D

       LeftBrace
           {D

       RightBrace
           }D

       Case
           caseD

       Do
           doD

       Done
           doneD

       Elif
           elifD

       Else
           elseD

       Esac
           esacD

       Fi
           fiD

       For
           forD

       Function
           functionD

       If
           ifD

       In
           inD

       Then
           thenD

       Until
           untilD

       While
           whileD

       D
           !WordS*

       SpecialChar
           [|&;<>()`\"' [:blank:]] / NL

       NL
           <newline>

       EOF
           !.

ALIAS 組込みコマンド

       Alias 組込みコマンドはエイリアスを設定・表示します。

   構文alias [-gp] [エイリアス名[=]...]

   説明
       Alias コマンドはエイリアスをオペランドに従って設定または表示します。表示は、コマンド (の一
       部) として解釈可能な形式で標準出力に出力します。オペランドを一つも与えない場合、alias コマ
       ンドは現在設定されている全てのエイリアスを表示します。

   オプション
       -g, --global
           このオプションを指定した場合、設定するエイリアスはグローバルエイリアスになります。この
           オプションを指定しない場合、設定するエイリアスは通常のエイリアスになります。

       -p, --prefix
           このオプションは表示の書式を選択します。このオプションを指定した場合、alias コマンドと
           そのコマンドライン引数全てを表示します。このオプションを指定しない場合、alias コマンド
           に渡すオペランドだけを表示します。

   オペランド
       エイリアス名
           表示するエイリアスの名前です。

       エイリアス名=
           設定するエイリアスの名前とその内容です。

   終了ステータス
       エラーがない限り alias コマンドの終了ステータスは 0 です。

   補足
       Yash でエイリアスの名前として使えない文字は、空白文字・タブ・改行、および =$<>\'"`;&|()#
       の各文字です。エイリアスの内容にはすべての文字が使えます。

       Alias コマンドは準特殊組込みコマンドです。

       POSIX にはオプションに関する規定はありません。よってオプションは POSIX 準拠モードでは使え
       ません。

ARRAY 組込みコマンド

       Array 組込みコマンドは配列の表示や操作を行います。

   構文arrayarray 配列名 [...]array -d 配列名 [インデックス...]array -i 配列名 インデックス [...]array -s 配列名 インデックス 

   説明
       オプションもオペランドも指定せずに実行すると、array コマンドは全ての配列の定義を (コマンド
       として解釈可能な形式で) 標準出力に出力します。

       オプションを指定せずに配列名を与えて実行すると、array コマンドはその配列の内容を指定さ
       れた値に設定します。

       -d (--delete) オプションを指定して実行すると、array コマンドは指定した配列の指定したイン
       デックスにある要素を削除します。配列の要素数は削除した要素の分だけ少なくなります。存在しな
       い要素のインデックスを指定したときは無視します。

       -i (--insert) オプションを指定して実行すると、array コマンドは指定した配列の指定したイン
       デックスにある要素の直後に指定した値を要素として追加します。配列の要素数は追加した要素の分
       だけ増えます。インデックス として 0 を指定すると配列の先頭に要素を追加します。インデックス
       として配列の要素数より大きな数を指定すると配列の末尾に要素を追加します。

       -s (--set) オプションを指定して実行すると、array コマンドは指定した配列の指定したインデッ
       クスにある要素の値を指定した値に変更します。

   オプション
       -d, --delete
           配列の要素を削除します。

       -i, --insert
           配列に要素を挿入します。

       -s, --set
           配列の要素を変更します。

   オペランド
       配列名
           表示または操作する配列の名前です。

       インデックス
           配列の要素を指定する自然数です。インデックスは最初の要素から順に 1, 2, 3, ... と割り振
           られます。

       
           配列の要素となる文字列です。

   終了ステータス
       エラーがない限り array コマンドの終了ステータスは 0 です。

   補足
       POSIX には array コマンドに関する規定はありません。

       array 配列名 [...] の形式の array コマンドは変数代入を用いて 配列名=(...) と書くことも
       できます。

BG 組込みコマンド

       Bg 組込みコマンドはジョブをバックグラウンドで実行します。

   構文bg [ジョブ...]

   説明
       Bg コマンドはジョブをバックグラウンドで実行します。ジョブには SIGCONT シグナルが送ら
       れ、ジョブが停止している場合は再開されます。

       ジョブの実行を再開する前に bg コマンドはジョブの名前を標準出力に出力します。

       Bg コマンドはジョブ制御が有効な時しか使えません。

   オペランド
       ジョブ
           実行するジョブのジョブ ID。

           ジョブを複数指定することもできます。何も指定しないと現在のジョブを実行します。

           非 POSIX 準拠モードではジョブ ID の先頭の % は省略できます。

   終了ステータス
       エラーがない限り bg コマンドの終了ステータスは 0 です。

   補足
       Bg コマンドは準特殊組込みコマンドです。

       POSIX は指定したジョブが既に実行中の場合は bg コマンドは何もしないと規定していますが、yash
       の bg コマンドはジョブが実行中かどうかにかかわらず SIGCONT シグナルを送信します。

BINDKEY 組込みコマンド

       Bindkey 組込みコマンドは行編集におけるキーバインド設定を表示・設定します。

   構文bindkey -aev [キー [コマンド]]bindkey -l

   説明
       -l (--list) オプションを付けて実行すると、bindkey コマンドはキーバインド設定で利用可能な行
       編集コマンドの一覧を標準出力に出力します。

       他のオプションを付けて実行すると、bindkey コマンドはキーバインド設定の表示または設定を行い
       ます。

       •   オペランドとしてキーコマンドを与えない場合、現在のキーバインド設定の内容を (コマンド
           として解釈可能な形式で) 標準出力に出力します。

       •   キーのみを与えると、そのキーに対する現在の設定だけを出力します。

       •   キーコマンドを両方与えると、そのキーを入力したときに実行するコマンドを指定したコマン
           ドに設定します。

   オプション
       -a, --vi-command
           Vi 風編集モードのコマンドモードにおけるキーバインドを表示・設定します。

       -e, --emacs
           Emacs 風編集モードにおけるキーバインドを表示・設定します。

       -v, --vi-insert
           Vi 風編集モードの挿入モードにおけるキーバインドを表示・設定します。

   オペランド
       キー
           表示・設定する対象のキー入力シーケンスです。このオペランドの値にはバックスラッシュで始
           まるエスケープシーケンスが利用できます。

       コマンド
           設定する行編集コマンドです。ハイフン一つ (-) を指定すると、指定したキーに対する設定を
           削除します。

   終了ステータス
       エラーがない限り bindkey コマンドの終了ステータスは 0 です。

   補足
       POSIX には bindkey コマンドに関する規定はありません。

BREAK 組込みコマンド

       Break 組込みコマンドは実行中のループを中断します。

   構文break [深さ]break -i

   説明
       -i (--iteration) オプションを付けずに実行すると、break コマンドは現在実行中の for ループま
       たは while ループまたは until ループを中断します。多重ループの中で実行した場合、内側から数
       えて深さ番目のループを中断します。深さが指定されていないときは、最も内側のループを中断しま
       す (深さ = 1)。指定された深さが実際に実行している多重ループの深さより大きい場合は最も外側
       のループを中断します。

       -i (--iteration) オプションを付けて実行すると、break コマンドは現在実行中の反復実行を中断
       します。

   オプション
       -i, --iteration
           ループではなく反復実行を中断します。

   オペランド
       nest
           内側から何番目のループを中断するのかを指定する 1 以上の自然数です。

   終了ステータス
       ループの中断に成功すると終了ステータスは 0 です。反復実行の中断に成功すると break コマンド
       の直前に実行されたコマンドの終了ステータスが break コマンドの終了ステータスになります。

   補足
       Break コマンドは特殊組込みコマンドです。

       POSIX には -i (--interact) オプションに関する規定はありません。よってこのオプションは
       POSIX 準拠モードでは使えません。

CD 組込みコマンド

       Cd 組込みコマンドはシェルの作業ディレクトリを変更します。

   構文cd [-L|-P] [ディレクトリ]

   説明
       Cd コマンドはシェルの作業ディレクトリをオペランドで指定したディレクトリに変更します。新し
       い作業ディレクトリに応じて PWD 変数の値が再設定されるとともに、前の PWD 変数の値が OLDPWD
       変数に設定されます。

       指定したディレクトリが相対パスの場合 (最初が . または .. で始まるものを除く)、コマンドの検
       索における PATH 変数の検索と同様にして、CDPATH 変数の値にあるコロンで区切った各ディレクト
       リ内に指定したディレクトリがあるかどうか調べます。ディレクトリが見つかった場合は、そのディ
       レクトリが新しい作業ディレクトリになります。見つからなかった場合は、ディレクトリは現在の作
       業ディレクトリからの相対パスとなります。

       CDPATH 変数の検索で新しい作業ディレクトリが見つかった場合またはディレクトリとして - が指定
       された場合は新しい作業ディレクトリのパスを標準出力に出力します。

       作業ディレクトリの変更に成功した場合、YASH_AFTER_CD 変数が設定されていればその値がコマンド
       として解釈・実行されます (非 POSIX 準拠モード時)。

   オプション
       -L, --logical
           ディレクトリパスに含まれるシンボリックリンクを解決せずに新しい作業ディレクトリを決定し
           ます。新しい PWD 変数の値にはシンボリックリンクになっているパス名コンポーネントがその
           まま残ります。

       -P, --physical
           ディレクトリパスに含まれるシンボリックリンクを解決します。新しい PWD 変数の値はシンボ
           リックリンクを含みません。

       --default-directory=ディレクトリ
           ディレクトリオペランドが与えられていない場合は、代わりにこのオプションで指定したディレ
           クトリを新しい作業ディレクトリとします。

       -L (--logical) オプションと -P (--physical) オプションの両方を指定した場合、後に指定したほ
       うを優先します。どちらも指定していない場合は、-L を指定したものとみなします。

   オペランド
       ディレクトリ
           新しい作業ディレクトリのパス名です。絶対パスまたは元の作業ディレクトリからの相対パスで
           指定します。

           この値がハイフン一つ (「-」) の場合、OLDPWD 変数の値が指定されたものとみなします。この
           オペランドが与えられていない場合、HOME 変数の値が指定されたものとみなします
           (--default-directory オプションを指定した場合を除く)。

   終了ステータス
       作業ディレクトリを正しく変更できた場合、終了ステータスは 0 です。エラーがあると終了ステー
       タスは非 0 です。

   補足
       Cd コマンドは準特殊組込みコマンドです。

       POSIX には YASH_AFTER_CD 変数および --default-directory=... オプションに関する規定はありま
       せん。POSIX はディレクトリとしてハイフン一つを指定したときに -L または -P オプションを併用
       することを認めていません。

       YASH_AFTER_CD 変数の実行結果は cd コマンドの終了ステータスには影響しません。

コロン組込みコマンド

       コロン組込みコマンドは何も行わない組込みコマンドです。

   構文: [引数...]

   説明
       コロンコマンドは何も行いません。コマンドライン引数は一切無視します。

   終了ステータス
       コロンコマンドの終了ステータスは 0 です。

   補足
       コロンコマンドは特殊組込みコマンドです。

       引数の展開とリダイレクトは他のコマンドと同様に行います。

       True コマンドはコロンコマンドと同様に何も行いませんが、コロンコマンドは特殊組込みコマンド
       であるのに対し true コマンドは準特殊組込みコマンドです。

COMMAND 組込みコマンド

       Command 組込みコマンドはコマンドを実行します。またコマンドの種類を特定します。

   構文command [-befp] コマンド [引数...]command -v|-V [-abefkp] コマンド...

   説明
       -v (--identify) オプションならびに -V (--verbose-identify) オプションを付けずに実行する
       と、command コマンドは与えられたコマンドを与えられた引数で実行します。コマンドの実行の仕方
       は単純コマンドの実行の最後のステップに準じますが、コマンドの検索では外部コマンド・組込みコ
       マンド・関数の内オプションで指定したものしか検索しません。またコマンドが特殊組込みコマンド
       の場合、コマンドのオプションやオペランドの使い方が間違っていたりリダイレクトエラーや代入エ
       ラーが起きたりしてもシェルは終了しません。

       -v (--identify) オプションまたは -V (--verbose-identify) オプションを付けて実行する
       と、command コマンドは与えられたコマンドの種類とパスを特定しそれを標準出力に出力します。
       マンドはエイリアスや関数であっても構いません。

       -v (--identify) オプションを付けて実行したときの出力は以下のようになります。

       •   コマンドの検索の結果見つかったコマンドおよびその他の外部コマンドは、その絶対パスを出力
           します。

       •   コマンドの検索によらず実行される組込みコマンドや関数は、単にその名前を出力します。

       •   予約語は、単にその名前を出力します。

       •   エイリアスは、コマンドとして実行可能な形式でその名前と値を出力します。

       •   コマンドが見つからなかった場合は、何も出力しません。(終了ステータスが非 0 になります)

       -V (--verbose-identify) オプション使用時は、出力の形式が人間にとってより読みやすくなりま
       す。

   オプション
       -a, --alias
           コマンドとしてエイリアスを検索の対象にします。 -v (--identify) または -V
           (--verbose-identify) オプションと一緒に使う必要があります。

       -b, --builtin-command
           コマンドとして組込みコマンドを検索の対象にします。

       -e, --external-command
           コマンドとして外部コマンドを検索の対象にします。

       -f, --function
           コマンドとして関数を検索の対象にします。

       -k, --keyword
           コマンドとして予約語を検索の対象にします。 -v (--identify) または -V
           (--verbose-identify) オプションと一緒に使う必要があります。

       -p, --standard-path
           コマンドの検索において、PATH 変数の代わりに、標準のコマンドをすべて含むようなシステム
           固有のデフォルトパスを用いて外部コマンドを検索します。

       -v, --identify
           与えられたコマンドの種類とパスを特定し、簡単な形式で標準出力に出力します。

       -V, --verbose-identify
           与えられたコマンドの種類とパスを特定し、人間にとって読みやすい形式で標準出力に出力しま
           す。

       -a (--alias), -b (--builtin-command), -e (--external-command), -f (--function), -k
       (--keyword) オプションのどれも指定しなかった場合は、以下のオプションを指定したものとみなし
       ます。

       -v (--identify) あるいは -V (--verbose-identify) オプションを指定していないとき
           -b -e

       -v (--identify) または -V (--verbose-identify) オプションを指定しているとき
           -a -b -e -f -k

   オペランド
       コマンド
           実行するまたは種類を特定するコマンドの名前です。

       引数...
           実行するコマンドに渡すコマンドライン引数です。

   終了ステータス
       -v (--identify) あるいは -V (--verbose-identify) オプションを指定していないとき
           実行したコマンドの終了ステータス

       -v (--identify) または -V (--verbose-identify) オプションを指定しているとき
           エラーがない限り 0

   補足
       Command コマンドは準特殊組込みコマンドです。

       POSIX に規定のあるオプションは -p, -v, -V だけです。これ以外のオプションは POSIX 準拠モー
       ドでは使えません。また POSIX 準拠モードでは -v または -V オプションを使用するときコマンド
       はちょうど一つしか指定できません。

       POSIX は -v オプションと -V オプションを同時に指定することを認めていません。Yash ではこれ
       ら二つのオプションを両方指定すると最後に指定したものが有効になります。

COMPLETE 組込みコマンド

       Complete 組込みコマンドはコマンドライン補完において補完候補を生成します。この組込みコマン
       ドは補完関数の実行中にだけ使えます。

   構文complete [-A パターン] [-R パターン] [-T] [-P 接頭辞] [-S 接尾辞] [-abcdfghjkuv] [[-O]
           [-D 説明] 単語...]

   説明
       補完関数の中でこの組込みコマンドを実行すると、complete コマンドは指定した引数に従って補完
       候補を生成します。どのオプション・オペランドで候補を生成するにせよ、実際に生成される候補は
       現在補完しようとしている (コマンドライン上に途中まで入力された) 単語に一致するものに限られ
       ます。

   オプション
       -A パターン, --accept=パターン
           このオプションを指定すると、指定したパターンにマッチする候補だけを生成します。このオプ
           ションは複数回指定できます (指定した全てのパターンにマッチする候補だけを生成します)。

       -D 説明, --description=説明
           このオプションを指定すると、このオプションで指定した説明が補完の際に候補の説明として表
           示されます。

       -O, --option
           生成する候補をコマンドのオプションとみなすようにします。候補を画面上に一覧表示する際に
           自動的に先頭にハイフンを付加します。

       -P 接頭辞, --prefix=接頭辞
           このオプションで指定する接頭辞は現在補完しようとしている単語の接頭辞になっていなければ
           なりません。このオプションを指定すると、候補生成の際にこのオプションで指定した接頭辞を
           無視してマッチングを行います。例えば補完しようとしている単語が
           file:///home/user/docume であり、この URL をファイル名として補完したいとしましょう。こ
           の場合は、complete -P file:// -f とすると URL から file:// を除いた残りの
           /home/user/docume の部分に対してファイル名としての補完候補が生成されます。

       -R パターン, --reject=パターン
           このオプションを指定すると、指定したパターンにマッチする候補を生成しません。このオプ
           ションは複数回指定できます (指定したパターンの少なくとも一つにマッチする候補を全て除外
           します)。

       -S 接尾辞, --suffix=接尾辞
           生成した各候補の末尾に接尾辞を付加します。

       -T, --no-termination
           通常は、補完が終わった後に次の単語をすぐ入力できるように、補完した単語の直後に空白を自
           動的に挿入しますが、このオプションを指定したときは空白を挿入しません。

       補完方式設定のためのオプション
           -a, --alias
               エイリアス (--normal-alias --global-alias に同じ)

           --array-variable
               配列

           --bindkey
               Bindkey コマンドで利用可能な行編集コマンド

           -b, --builtin-command
               組込みコマンド (--special-builtin --semi-special-builtin --regular-builtin に同じ)

           -c, --command
               コマンド (--builtin-command --external-command --function に同じ)

           -d, --directory
               ディレクトリ

           --dirstack-index
               ディレクトリスタックのインデックス

           --executable-file
               実行可能ファイル

           --external-command
               外部コマンド

           -f, --file
               ファイル (ディレクトリ含む)

           --finished-job
               終了したジョブのジョブ ID

           --function
               関数

           --global-alias
               グローバルエイリアス

           -g, --group
               (ファイルのパーミッションなどにおける) グループ

           -h, --hostname
               ホスト名

           -j, --job
               ジョブ ID

           -k, --keyword
               シェルの予約語

           --normal-alias
               通常の (グローバルでない) エイリアス

           --regular-builtin
               通常の組込みコマンド

           --running-job
               実行中のジョブのジョブ ID

           --scalar-variable
               (配列を除いた通常の) 変数

           --semi-special-builtin
               準特殊組込みコマンド

           --signal
               シグナル

           --special-builtin
               特殊組込みコマンド

           --stopped-job
               停止中のジョブのジョブ ID

           -u, --username
               ユーザのログイン名

           -v, --variable
               変数

           -d (--directory) オプションを指定せずに -f (--file) オプションを指定した場合、-S ...
           (--suffix=...) オプションの指定の有無にかかわらず、ディレクトリ名を表す補完候補には接
           尾辞としてスラッシュが付き、候補の直後には空白が入りません (-S / -T を指定したときと同
           じ動作)。

           ジョブ ID の補完は先頭の % を除いた部分に対して行われるので、補完しようとしている単語
           が既に % を含んでいる場合は % を接頭辞として指定してください。

   オペランド
       Complete コマンドのオペランドは、各オペランドがそれぞれ補完候補として扱われます。指定した
       オペランドのうち、現在補完しようとしている単語に合うものが補完候補となります。

   終了ステータス
       候補が少なくとも一つ生成できた場合は、終了ステータスは 0 です。新たな候補が一つも生成でき
       なかったときは、終了ステータスは 1 です。その他のエラーの場合は 2 以上の終了ステータスにな
       ります。

   補足
       POSIX には complete コマンドに関する規定はありません。

CONTINUE 組込みコマンド

       Continue 組込みコマンドは実行中のループの次の繰り返しに処理を移します。

   構文continue [深さ]continue -i

   説明
       -i (--iteration) オプションを付けずに実行すると、continue コマンドは現在実行中の for ルー
       プまたは while ループまたは until ループの繰り返しを中断し、直ちに次の繰り返しを開始します
       (while/until ループについては、ループの実行条件の判定からやり直します)。多重ループの中で実
       行した場合、内側から数えて深さ番目のループに対してこの動作を行います。深さが指定されていな
       いときは、最も内側のループに対してこの動作を行います (深さ = 1)。指定された深さが実際に実
       行している多重ループの深さより大きい場合は最も外側のループに対してこの動作を行います。

       -i (--iteration) オプションを付けて実行すると、continue コマンドは現在実行中の反復実行の現
       在のコマンドの実行を中断し、直ちに次のコマンドの実行を開始します。

   オプション
       -i, --iteration
           ループではなく反復実行に対して作用します。

   オペランド
       深さ
           内側から何番目のループに作用するのかを指定する 1 以上の自然数です。

   終了ステータス
       -i (--iteration) オプションが指定されていないとき、continue コマンドの処理が成功すると終了
       ステータスは 0 です。-i (--iteration) オプションが指定されているとき、continue コマンドの
       処理が成功すると continue コマンドの直前に実行されたコマンドの終了ステータスが continue コ
       マンドの終了ステータスになります。

   補足
       Continue コマンドは特殊組込みコマンドです。

       POSIX には -i (--interact) オプションに関する規定はありません。よってこのオプションは
       POSIX 準拠モードでは使えません。

DIRS 組込みコマンド

       Dirs 組込みコマンドはディレクトリスタックの内容を表示します。

   構文dirs [-cv] [インデックス..]

   説明
       ディレクトリスタックとは、作業ディレクトリの変更の履歴をとる仕組みです。Pushd コマンドで作
       業ディレクトリを変更すると、元の作業ディレクトリがディレクトリスタックに追加されます。Popd
       コマンドを使うと、ディレクトリスタックに保存してある元の作業ディレクトリに戻ることができま
       す。Dirs コマンドを使うと、ディレクトリスタックの内容を表示することができます。ディレクト
       リスタックの内容は DIRSTACK 配列と PWD 変数に保存されます。これらの値を変更すると、ディレ
       クトリスタックの動作に影響します。

       ディレクトリスタックに保存してあるディレクトリはインデックスで区別します。インデックスは
       -v (--verbose) オプションを付けて dirs コマンドを実行することで知ることができます。イン
       デックスは正号 (+) または負号 (-) の付いた整数の形で表わします。整数は pushd コマンドで
       ディレクトリスタックに追加した順に振られます。例えばインデックス +0 は現在の作業ディレクト
       リに対応します。インデックス +1 は最後に追加したディレクトリで、インデックス +2 はその一つ
       前に追加したディレクトリに対応します。インデックス -0 は最初に 追加したディレクトリ、イン
       デックス -1 はその次に追加したディレクトリに対応します。

       -c (--clear) オプションを付けずに実行すると、dirs コマンドは現在のディレクトリスタックの要
       素を一つずつ標準出力に出力します。 -c (--clear) オプションを付けて実行すると、dirs コマン
       ドはディレクトリスタックのインデックス +0 以外の要素をすべて削除します。

   オプション
       -c, --clear
           ディレクトリスタックの要素を (現在の作業ディレクトリに対応するものを除いて) すべて削除
           します。

       -v, --verbose
           ディレクトリスタックの要素のインデックスも出力します。

   オペランド
       インデックス
           表示するディレクトリスタックの要素のインデックスです。インデックスを一つも指定しないと
           きは、全ての要素をインデックス +0 のものから順に表示します。

   終了ステータス
       エラーがない限り dirs コマンドの終了ステータスは 0 です。

   補足
       POSIX には dirs コマンドに関する規定はありません。

DISOWN 組込みコマンド

       Disown 組込みコマンドはジョブを削除します。

   構文disown [-a] [ジョブ...}

   説明
       Disown コマンドはシェルが管理しているジョブを削除します。削除したジョブはジョブ制御の対象
       から外れますが、ジョブを構成するコマンドの実行は継続します。

   オプション
       -a, --all
           全てのジョブを削除します。

   オペランド
       ジョブ
           削除するジョブのジョブ ID。

           複数指定することもできます。何も指定しないと現在のジョブを削除します。非 POSIX 準拠
           モードではジョブ ID の先頭の % は省略できます。

   終了ステータス
       エラーがない限り disown コマンドの終了ステータスは 0 です。

   補足
       POSIX には disown コマンドに関する規定はありません。

ドット組込みコマンド

       ドット組込みコマンドはテキストファイルを開いて、その内容をコマンドとして解釈し実行します。

   構文. [-AL] ファイル名 [引数...]

   説明
       ドットコマンドは与えられたファイル名のファイルを開き、その内容をコマンドとして解釈し現在の
       コマンド実行環境で実行します。

       ファイル名に続けて引数が与えられているときは、関数の実行の時と同様に、コマンドの実行前に
       が位置パラメータに設定され、実行後に元の位置パラメータに戻ります。

       ファイル名にスラッシュ (/) が一つも入っていない場合は、コマンドの検索のときと同様に PATH
       変数の検索を行い、開くべきファイルを探します。ただしファイルは読み込み可能でさえあれば実行
       可能である必要はありません。検索の結果ファイルが見つかれば、そのファイルの内容を解釈・実行
       します。ファイルが見つからなかった場合、POSIX 準拠モードでは直ちにエラーになります。POSIX
       準拠モードでないときは現在の作業ディレクトリのファイルを開くことを試みます。

   オプション
       -A, --no-alias
           ファイルを読み込んで実行する際、エイリアス展開を行いません。

       -L, --autoload
           ファイル名がスラッシュを含んでいるかどうかにかかわらず、PATH 変数の代わりに
           YASH_LOADPATH 変数を検索して開くべきファイルを探します。ファイル名は現在の作業ディレク
           トリからの相対パス名とはみなしません。

       ドットコマンドでは、最初のオペランドより後にあるコマンドライン引数は全てオペランドとして解
       釈します。

   オペランド
       ファイル名
           読み込むファイルのパス名です。

       引数...
           ファイルの内容を実行している間に位置パラメータに設定する文字列です。

   終了ステータス
       ドットコマンドの終了ステータスは、ファイルから読み込んで実行した最後のコマンドの終了ステー
       タスです。ファイルの内容に一つもコマンドが入っていなかったときは終了ステータスは 0 で
       す。ファイルが見つからなかったり開けなかったりしたときは終了ステータスは非 0 です。

   補足
       ドットコマンドは特殊組込みコマンドです。

       シェルが対話モードでないとき、読み込むべきファイルが見つからなかったり開けなかったりすると
       シェルは直ちに終了します。

       POSIX にはオプションに関する規定はありません。よってオプションは POSIX 準拠モードでは使え
       ません。

       POSIX には引数オペランドによって位置パラメータを変更できることについての規定はありませ
       ん。よって POSIX 準拠モードでは引数オペランドを与えるとエラーになります。

ECHO 組込みコマンド

       Echo 組込みコマンドはコマンドライン引数を標準出力に出力します。

   構文echo [文字列...]

       Echo コマンドはコマンドライン引数を全てオペランドとして解釈します。オプションは、以下に述
       べる例外を除いて一切解釈しません。オプションはオペランドより前に置く必要があります。Echo
       コマンドでは構文エラーは絶対に起きません。

   説明
       Echo コマンドは与えられたコマンドライン引数と改行を標準出力に出力します。引数がない場合は
       改行だけを出力します。引数が複数ある場合はそれぞれを空白文字で区切って出力します。

       エスケープシーケンス
           Echo コマンドに与える引数では、後述の ECHO_STYLE 変数と -e オプションの指定によって以
           下のエスケープシーケンスを使用することができます。

           \a
               ベル文字 (ASCII コード番号 7)

           \b
               バックスペース (ASCII コード番号 8)

           \c
               これ以降何も出力しない。

           \e
               エスケープ文字 (ASCII コード番号 27)

           \f
               フォームフィード (ASCII コード番号 12)

           \n
               改行文字 (ASCII コード番号 10)

           \r
               復帰文字 (ASCII コード番号 13)

           \t
               水平タブ (ASCII コード番号 9)

           \v
               垂直タブ (ASCII コード番号 11)

           \\
               バックスラッシュ

           \0xxx
               八進数 xxx (最大三桁) で表わされるコード番号の文字

           エスケープシーケンスが無効の時は、エスケープシーケンスは解釈せずにそのまま出力します。

       ECHO_STYLE 変数
           Echo コマンドがオプションやエスケープシーケンスを解釈するかどうかは ECHO_STYLE 変数の
           値によります。以下に、この変数の値と echo コマンドの動作との対応を示します。

           SYSV, XSI
               オプションは一切解釈しません。常にエスケープシーケンスを解釈します。

           BSD
               -n オプションを解釈します。エスケープシーケンスは一切解釈しません。

           GNU
               -n, -e, -E オプションを解釈します。エスケープシーケンスは -e オプションを指定した
               ときだけ解釈します。

           ZSH
               -n, -e, -E オプションを解釈します。エスケープシーケンスは -E オプションを指定しな
               いかぎり解釈します。

           DASH
               -n オプションを解釈します。常にエスケープシーケンスを解釈します。

           RAW
               オプションもエスケープシーケンスも一切解釈しません。

           ECHO_STYLE 変数が設定されていないときは、値が SYSV または XSI の場合の動作をします。

   オプション
       -n
           最後に改行を出力しないようにする。

       -e
           エスケープシーケンスを解釈するようにする。

       -E
           エスケープシーケンスを解釈せず、全ての文字をそのまま出力するようにする。

   終了ステータス
       エラーがない限り echo コマンドの終了ステータスは 0 です。

   補足
       POSIX には ECHO_STYLE 変数およびオプションに関する規定はありません。POSIX では、-n オプ
       ションが指定されたときまたは引数にバックスラッシュが含まれている場合の動作を規定していませ
       ん。可搬性のあるシェルスクリプトを書くには、echo コマンドよりも printf コマンドの使用を推
       奨します。

EVAL 組込みコマンド

       Eval 組込みコマンドはオペランドをコマンドとして解釈して実行します。

   構文eval [-i] [コマンド...]

       Eval コマンドでは、POSIX 準拠モードであるかどうかにかかわらずオプションはオペランドより先
       に全て指定しなければなりません。最初のオペランドより後にあるコマンドライン引数は全てオペラ
       ンドとして解釈します。

   説明
       Eval コマンドは、与えられたオペランドをシェルのコマンドとして解釈し、現在のコマンド実行環
       境で実行します。

       -i (--iteration) オプションが指定されていないときは、コマンドをまとめて一度に解釈・実行し
       ます。複数のオペランドがある場合は、それらを順に連結して一つにしてから解釈・実行します (連
       結の際、各オペランド間に空白文字を一つずつ区切りとして挿入します)。

       -i (--iteration) オプションが指定されているときは、オペランドを順に一つずつ解釈・実行しま
       す。これを反復実行といいます。反復実行の途中で continue コマンドを -i オプション付きで実行
       した場合、コマンドの実行は中断され、eval コマンドに与えられた次のオペランドの解釈・実行に
       移ります。反復実行の途中で break コマンドを -i オプション付きで実行した場合、反復実行は中
       断され、この eval コマンドの実行は終了します。特殊パラメータ ? の値が反復実行の開始前に保
       存されます。オペランドを一つ解釈・実行するたびに特殊パラメータ ? の値は保存された値にもど
       ります。

   オプション
       -i, --iteration
           与えられたコマンドを順に反復実行します。

   オペランド
       コマンド
           コマンドとして解釈・実行する文字列です。

   終了ステータス
       オペランドが一つもない場合またはオペランドの中にコマンドが一つも含まれていなかった場合、終
       了ステータスは 0 です。コマンドが一つ以上解釈・実行された場合、最後に実行したコマンドの終
       了ステータスが eval コマンドの終了ステータスになります。

   補足
       Eval コマンドは特殊組込みコマンドです。

       POSIX にはオプションに関する規定はありません。よってオプションは POSIX 準拠モードでは使え
       ません。

EXEC 組込みコマンド

       Exec 組込みコマンドはシェルのプロセスを別の外部コマンドに置き換えます。またシェルのプロセ
       スに対してリダイレクトを実行します。

   構文exec [-cf] [-a コマンド名] [コマンド [引数...]]

       Exec コマンドでは、POSIX 準拠モードであるかどうかにかかわらずオプションはオペランドより先
       に全て指定しなければなりません。これは exec コマンドに対するオプションとコマンドに対するオ
       プションを区別するために重要です。コマンドより後にある引数はすべて引数とみなされます。

   説明
       Exec コマンドをコマンドを指定して実行すると、シェルは単純コマンドの実行の最後のステップと
       同様にしてコマンドを実行します。ただし、コマンドは必ず外部コマンドとしてみなされ、関数や組
       込みコマンドは無視します。そしてその外部コマンドはサブシェルではなく現在のコマンド実行環境
       で exec システムコールを呼び出すことで実行します。これにより、シェルのプロセスは新しく起動
       するコマンドに置き換わります。

       シェルが POSIX 準拠モードのときまたは対話モードでないとき、コマンドの起動に失敗するとシェ
       ルは直ちに終了します。

       シェルが POSIX 準拠モードではなくかつ対話モードのとき、停止中のジョブがあると、シェルは警
       告を表示し、コマンドを起動しません。一度 exec が実行されると、シェルが持っているジョブの情
       報は失われるため、手動でシグナルを送ってジョブを再開または終了させなければならなくなりま
       す。警告を無視してコマンドを起動するには -f (--force) オプションを付けてください。

       コマンドなしで実行した場合 exec コマンドは何も行いませんが、この exec コマンドを実行する際
       に行ったリダイレクトの効果は現在のコマンド実行環境に残ります。

   オプション
       -a コマンド名, --as=コマンド名
           コマンドの代わりにコマンド名をコマンド名としてコマンドに渡します。

       -c, --clear
           既存の環境変数をすべて削除した状態でコマンドを実行します。ただしこの exec コマンドを実
           行する際に行った変数代入の結果は環境変数としてコマンドに渡します。

       -f, --force
           警告を無視してコマンドを実行します。

   オペランド
       コマンド
           実行するコマンドです。

       引数...
           実行するコマンドに渡すコマンドライン引数です。

   終了ステータス
       指定されたコマンドの起動に成功した場合、シェルのプロセスはそのコマンドのプロセスに置き換
       わってしまうので、終了ステータスはありません。

       実行しようとしたコマンドが見つからなかった場合、終了ステータスは 127 です。コマンドが見つ
       かったが実行できなかった場合、終了ステータスは 126 です。コマンドを指定せずに exec コマン
       ドを実行した場合、終了ステータスは 0 です。

   補足
       Exec コマンドは特殊組込みコマンドです。

       POSIX にはオプションに関する規定はありません。よってオプションは POSIX 準拠モードでは使え
       ません。

EXIT 組込みコマンド

       Exit 組込みコマンドコマンドはシェルの実行を終了します。

   構文exit [-f] [終了ステータス]

   説明
       Exit コマンドは、このコマンドを実行したシェル (またはサブシェル) を終了します。

       停止しているジョブのある対話モードのシェルを終了しようとすると、シェルは警告を表示し、終了
       しません。-f (--force) オプションを付けて実行するか exit コマンドを二連続で実行すると警告
       を無視してシェルを終了します。

       シェル終了時のトラップが設定されている場合は、シェルが終了する前にそれが実行されます。

   オプション
       -f, --force
           警告を無視してシェルを終了します。

   オペランド
       終了ステータス
           終了するシェルの終了ステータスを指定する 0 以上の自然数です。

           このオペランドが与えられていない場合は、exit コマンドの直前に実行されたコマンドの終了
           ステータスを用います (ただしトラップを実行中の場合はトラップに入る直前のコマンドの終了
           ステータス)。

           終了するシェルの実際の終了ステータスは、オペランドで与えられた数を 256 で割った余りに
           なります。

   終了ステータス
       Exit コマンドはシェルを終了するので、exit コマンドそのものの終了ステータスはありません。

       例外として、exit コマンドが警告を表示して、シェルを終了しなかった場合、exit コマンドの終了
       ステータスは非 0 です。

   補足
       Exit コマンドは特殊組込みコマンドです。

       POSIX では、終了ステータスの値は 0 以上 256 未満でなければならないとしています。Yash では
       拡張として 256 以上の値も受け付けるようになっています。

       POSIX には -f (--force) オプションに関する規定はありません。よってこのオプションは POSIX
       準拠モードでは使えません。

       シェル終了時のトラップの実行中に exit コマンドを実行すると、再びトラップが実行されることは
       なくそのままシェルは終了します。このとき exit コマンドに終了ステータスが与えられていない場
       合は、もし終了時のトラップが設定されていなかった場合にシェルが返したろう終了ステータスで
       シェルは終了します。(シェルの終了も参照)

EXPORT 組込みコマンド

       Export 組込みコマンドはエクスポート対象の変数を表示・設定します。

   構文export [-prX] [変数[=]...]

   説明
       Export コマンドは typeset コマンドに -gx オプションを付けたものと同じです。その他オプショ
       ン・オペランド・終了ステータスは typeset コマンドと同様です。

   補足
       Export コマンドは特殊組込みコマンドです。

       POSIX には export コマンドに関する規定はありますが、オプションは -p しか規定がありませ
       ん。その他のオプションは POSIX 準拠モードでは使えません。また POSIX は -p オプションをオペ
       ランドとともに使うことを認めていません。

FALSE 組込みコマンド

       False 組込みコマンドは何も行わずに非 0 の終了ステータスで終了します。

   構文false

   説明
       False コマンドは何も行いません。コマンドライン引数は一切無視します。

   終了ステータス
       False コマンドの終了ステータスは非 0 です。

   補足
       False コマンドは準特殊組込みコマンドです。

FC 組込みコマンド

       Fc 組込みコマンドはコマンド履歴に記録されたコマンドを再実行・表示します。

   構文fc [-qr] [-e エディタ] [始点 [終点]]fc -s[q] [=] [始点]fc -l[nrv] [始点 [終点]]

   説明
       -l (--list) オプションを付けずに実行すると、fc コマンドはオペランドで指定したコマンド履歴
       のコマンドを再実行します。-s (--silent) オプションを付けていない場合、シェルはコマンドを再
       実行する前にエディタを起動し、コマンドを編集できるようにします。エディタが終了するとシェル
       は編集後のコマンドを実行します。-s (--silent) オプションを付けた場合、シェルはエディタを起
       動せず直接コマンドを再実行します。いずれの場合も、実行するコマンドは標準出力に出力しコマン
       ド履歴に追加されます。

       -l (--list) オプションを付けて実行すると、fc コマンドはオペランドで指定した範囲のコマンド
       履歴を標準出力に出力します。標準では履歴内のコマンドの内容を履歴番号とともに表示します
       が、-n (--no-numbers) および -v (--verbose) オプションにより出力形式を変更できます。

   オプション
       -e エディタ, --editor=エディタ
           コマンドの編集に用いるエディタ。

           このオプションを指定しない場合、FCEDIT 変数の値をエディタとして使用します。FCEDIT 変数
           も設定されていない場合は、vi をエディタとして使用します。

       -l, --list
           コマンド履歴の内容を表示します。

       -n, --no-numbers
           コマンド履歴の内容を表示する際、履歴番号を省いてコマンドのみ表示します。

       -q, --quiet
           コマンドを実行する前にコマンドを出力しないようにします。

       -r, --reverse
           始点終点を入れ替えます。

       -s, --silent
           コマンドを編集せずに直接再実行します。

       -v, --verbose
           コマンド履歴の内容を表示する際、コマンドの時刻も表示します。

   オペランド
       始点終点
           始点終点のオペランドは、再実行または表示するコマンドの範囲を指定します。始点あるいは
           終点に整数を指定すると、それは履歴番号とみなします。負の整数は最新の履歴から数えた番号
           となります。例えば -2 は最後から二番目に履歴に登録されたコマンドを表します。整数以外の
           文字列を始点あるいは終点に指定すると、その文字列で始まる最新の履歴を指定しているものと
           みなします。

           Fc コマンドが再実行または表示するコマンドは、始点終点で指定したコマンドとその間にあ
           る履歴のコマンドです。始点終点より後のコマンドを指している場合、コマンドの順序は逆に
           なります。

           始点または終点が与えられていない場合のデフォルト値は以下の表のとおりです。

           ┌─────┬─────────┬────────────┐
           │     │ -l あり │ -l なし    │
           ├─────┼─────────┼────────────┤
           │始点 │ -16     │ -1         │
           ├─────┼─────────┼────────────┤
           │終点 │ -16     │ 始点に同じ │
           └─────┴─────────┴────────────┘

       =
           =の形式のオペランドは、コマンドの一部を書き換えることを指示します。再実行するコマ
           ンドの中にと同じ文字列がある場合は、その部分をに置き換えて実行します。該当部分が複
           数ある場合は、最初のものだけを置き換えます。

   終了ステータス
       コマンドを正しく再実行できた場合、fc コマンドの終了ステータスは再実行したコマンドの終了ス
       テータスになります。-l (--list) オプションを指定した場合は、履歴が正しく出力できれば終了ス
       テータスは 0 です。

   補足
       Fc コマンドは準特殊組込みコマンドです。

       POSIX には -q (--quiet) および -v (--verbose) オプションに関する規定はありません。よってこ
       れらのオプションは POSIX 準拠モードでは使えません。

       行編集の動作中は履歴の内容を変更することはできません。

FG 組込みコマンド

       Fg 組込みコマンドはジョブをフォアグラウンドで実行します。

   構文fg [ジョブ...]

   説明
       Fg コマンドはジョブをフォアグラウンドに移動し SIGCONT シグナルを送ります。これにより、ジョ
       ブが停止していた場合はフォアグラウンドで実行が再開されます。Fg コマンドはジョブの実行が終
       了するまで待機し、ジョブの終了ステータスを返します。

       ジョブの実行を再開する前に fg コマンドはジョブの名前を標準出力に出力します。

       Fg コマンドはジョブ制御が有効な時しか使えません。

   オペランド
       ジョブ
           実行するジョブのジョブ ID。

           複数指定すると指定した順に一つずつジョブをフォアグラウンドで実行します。何も指定しない
           と現在のジョブを実行します。

           非 POSIX 準拠モードではジョブ ID の先頭の % は省略できます。

   終了ステータス
       ジョブを正しく実行できた場合、fg コマンドの終了ステータスは (最後に) 実行したジョブの終了
       ステータスです。エラーが発生した場合は終了ステータスは非 0 です。

   補足
       Fg コマンドは準特殊組込みコマンドです。

       POSIX 準拠モードではジョブは一つまでしか指定できません。

GETOPTS 組込みコマンド

       Getopts 組込みコマンドはコマンドライン引数のオプションを解析します。

   構文getopts オプションリスト 変数名 [引数...]

   説明
       Getopts コマンドは、オペランドで与えられたコマンドライン引数に含まれている一文字のオプショ
       ンを解析します。Getopts コマンドを一回呼び出すたびにオプションが一つ解析され、そのオプショ
       ンを表す一文字が変数名で指定した変数に代入されます。

       解析の対象となるオプションの種類もオペランドで指定します。オプションリストには受け付けるオ
       プションの文字を並べて指定します。文字の後にコロン (:) を付けるとそのオプションは引数をと
       るものとみなします。例えば、-a, -b, -c の三種類のオプションを受け付け、さらにこれらのうち
       -b が引数をとる場合、オプションリストには ab:c を指定します。

       引数をとるオプションを解析したとき、その引数の値が OPTARG 変数に代入されます。

       オプションリストで与えられていないオプションに出くわしたときまたは引数をとるオプションに引
       数が与えられていないときの動作は、オプションリストの最初の文字がコロン (:) であるかどうか
       で決まります。

       •   オプションリストの最初の文字がコロンの場合、そのオプションの文字が OPTARG 変数に代入さ
           れ、変数名で指定した変数には ?  (オプションリストで与えられていないオプションに出くわ
           したとき) または : (引数をとるオプションに引数が与えられていないとき) が代入されます。

       •   オプションリストの最初の文字がコロンでない場合、OPTARG 変数は削除され、変数名で指定し
           た変数には ?  が代入されます。またこのとき標準エラーにエラーメッセージが出力されます
           が、それでも getopts コマンドの終了ステータスは 0 になります。

       Getopts コマンドは、実行するたびに一つずつオプションを解析します。全てのオプションを解析す
       るには、毎回同じ引数で getopts コマンドを繰り返し実行する必要があります。シェルは、オプ
       ションをどこまで解析したかを覚えておくために、OPTIND 変数を用います。全てのオプションを解
       析し終わるまでにこの変数を変更してはいけません。全てのオプションを解析し終わると、OPTIND
       変数には引数 (または位置パラメータ) の中で最初のオペランドに当たるもののインデックスが代入
       されます (オペランドがない場合は引数または位置パラメータの個数 + 1 になります)。

       異なる引数を解析させたい場合は、getopts コマンドに新しい引数を与える前に OPTIND 変数に 1
       を代入してください。

   オペランド
       オプションリスト
           解析の対象となるオプションの文字の羅列です。

       変数名
           解析結果の値を代入する変数の名前です。

       引数s
           解析するコマンドライン引数です。

           このオペランドを指定しない場合は、位置パラメータを解析します。

   終了ステータス
       引数の中にオプションが見つかった場合は、(それがオプションリストに含まれているかどうかにか
       かわらず) 終了ステータスは 0 です。全てのオプションを解析し終わった時は、終了ステータスは
       非 0 です。

   使用例
           aopt=false bopt= copt=false
           while getopts ab:c opt
           do
             case $opt in
             a) aopt=true ;;
             b) bopt=$OPTARG ;;
             c) copt=true ;;
             \?) return 2 ;;
             esac
           done
           if $aopt;          then echo オプション -a が指定されました;       fi
           if [ -n "$bopt" ]; then echo オプション -b $bopt が指定されました; fi
           if $copt;          then echo オプション -c が指定されました;       fi
           shift $((OPTIND - 1))
           echo オペランドは $*

   補足
       Getopts コマンドが解析するコマンドライン引数では、オプションは全てオペランドより前に指定し
       てある必要があります。最初にオペランドが現れた時点で、getopts コマンドは解析を終了します。

       Getopts コマンドは準特殊組込みコマンドです。

       POSIX は、OPTIND 変数に 1 以外の値を代入した場合の動作を規定していません。

HASH 組込みコマンド

       Hash 組込みコマンドは外部コマンドのパスを検索・表示します。

   構文hash コマンド...hash -r [コマンド...]hash [-a]hash -d ユーザ名...hash -dr [ユーザ名...]hash -d

   説明
       オプションを指定しない場合、hash コマンドはオペランドで指定した外部コマンドのパスを検索
       し、結果を記憶します (既に記憶している場合は再度検索・記憶します)。

       -r (--remove) オプションを指定している場合、hash コマンドはオペランドで指定した外部コマン
       ドのパスに関する記憶を消去します。-r (--remove) オプションを指定しかつコマンドを指定しない
       場合、全ての記憶を消去します。

       -r (--remove) オプションを指定せずコマンドも指定しない場合、記憶しているパスの一覧を標準出
       力に出力します。

       -d (--directory) オプションを指定した場合、hash コマンドは外部コマンドのパスの代わりにユー
       ザのホームディレクトリのパスを検索・記憶または表示します。記憶したパスはチルダ展開で使用し
       ます。

   オプション
       -a, --all
           シェルが記憶している全てのパスを出力します。

           このオプションを指定しない場合、シェルが記憶しているパスのうち組込みコマンドに対するも
           のは出力しません。

       -d, --directory
           外部コマンドのパスの代わりにユーザのホームディレクトリのパスを扱います。

       -r, --remove
           指定したコマンドまたはユーザ名に対するパスの記憶を消去します。

   オペランド
       コマンド
           パスを記憶・消去する外部コマンドの名前です。スラッシュを含むパスを指定することはできま
           せん。

       ユーザ名
           ホームディレクトリのパスを記憶・消去するユーザ名です。

   終了ステータス
       エラーがない限り hash コマンドの終了ステータスは 0 です。

   補足
       シェルは、外部コマンド (またはチルダ展開) を実行する際に自動的にコマンド (またはホームディ
       レクトリ) のパスを記憶するので、通常はわざわざ hash コマンドを使ってパスを記憶させる必要は
       ありません。

       PATH 変数の値が変わった時は、記憶した外部コマンドのパスは自動的にすべて消去されます。

       POSIX が規定しているオプションは -r だけです。よって他のオプションは POSIX 準拠モードでは
       使えません。

HELP 組込みコマンド

       Help 組込みコマンドは組込みコマンドに関する説明を表示します。

   構文help [コマンド...]

   説明
       Help 組込みコマンドは、オペランドで指定した組込みコマンドに関する説明を出力します。

       このコマンドは、man yash の出力の一部を抜き出して標準出力に出力します。従って、マニュアル
       ページがインストールされていなければ正しく動作しません。また、man コマンドの出力の形式に
       よっては正しく説明を抜き出せないことがあります。

   オペランド
       コマンド
           説明を表示する組込みコマンドの名前です。

   終了ステータス
       エラーがない限り help コマンドの終了ステータスは 0 です。 The exit status of the help
       built-in is zero unless there is any error.

   補足
       POSIX には help コマンドに関する規定はありません。

       Yash の多くの組込みコマンドでは、--help オプションを与えることで help コマンドの出力と同様
       の説明を表示させることができます。

HISTORY 組込みコマンド

       History 組込みコマンドはコマンド履歴を編集します。

   構文history [-cF] [-d 項目] [-s コマンド] [-r ファイル] [-w ファイル] [個数]

   説明
       History コマンドはコマンド履歴の内容を編集・表示します。

       オプションが指定してある場合、history コマンドはそのオプションに従ってコマンド履歴の内容を
       編集します。複数のオプションがある場合は指定した順に処理します。

       オペランドで個数が与えられている場合、history コマンドはコマンド履歴の内容をその個数だけ標
       準出力に出力します。出力の形式は fc コマンドに準じます。

       オプションもオペランドも与えられていない場合、history コマンドはコマンド履歴の内容を全て標
       準出力に出力します。

   オプション
       -c, --clear
           コマンド履歴をすべて削除します。

       -d 項目, --delete=項目
           指定した項目をコマンド履歴から削除します。項目の指定の仕方は fc コマンドの始点終点オ
           ペランドと同じです。

       -F, --flush-file
           履歴ファイルを再構築します。

       -r ファイル, --read=ファイル
           指定したファイルからコマンドを読み込み履歴に追加します。ファイルの内容は単なるテキスト
           ファイルとして解釈され、それぞれの行の内容が一つのコマンドとして追加されます。

       -s コマンド, --set=コマンド
           コマンド履歴の最後の項目を削除し、代わりに指定したコマンドを追加します。

       -w ファイル, --write=ファイル
           指定したファイルに現在のコマンド履歴の内容を全て書き出します。既にあるファイルの内容は
           消去します。履歴は単なるテキストとして一行ずつ書き出します。

   オペランド
       個数
           表示する履歴の個数です。

   終了ステータス
       エラーがない限り history コマンドの終了ステータスは 0 です。

   補足
       POSIX には history コマンドに関する規定はありません。

       行編集の動作中は履歴の内容を変更することはできません。

JOBS 組込みコマンド

       Jobs 組込みコマンドはシェルが有しているジョブを表示します。

   構文jobs [-lnprs] [ジョブ...]

   説明
       Jobs コマンドはシェルが現在有しているジョブの名前や状態を表示します。

       標準では各ジョブについて以下の情報を一行ずつ表示します。

       •   ジョブ番号

       •   現在のジョブ・前のジョブを示す記号 (+ または -)

       •   状態

       •   コマンド名

   オプション
       -l, --verbose
           ジョブを構成しているパイプラインの要素ごとにプロセス ID と状態とコマンド名を表示しま
           す。

       -n, --new
           状態が変化してからまだ一度も表示していないジョブだけを表示します。

       -p, --pgid-only
           ジョブのプロセスグループ ID だけを表示します。

       -r, --running-only
           実行中のジョブだけを表示します。

       -s, --stopped-only
           停止中のジョブだけを表示します。

   オペランド
       ジョブ
           表示するジョブのジョブ ID です。一つも指定しない場合は全てのジョブを表示します。

   終了ステータス
       エラーがない限り jobs コマンドの終了ステータスは 0 です。

   補足
       Jobs コマンドは準特殊組込みコマンドです。

       POSIX で規定されているオプションは -l-p だけです。従って POSIX 準拠モードではこれ以外
       のオプションは使えません。また POSIX 準拠モードでは、-l オプション指定時、プロセスごとでは
       なくジョブごとに状態を表示します。

       Yash では、ジョブのプロセスグループ ID はジョブを構成するパイプラインの最初のコマンドのプ
       ロセス ID に一致します。

KILL 組込みコマンド

       Kill 組込みコマンドはプロセスにシグナルを送ります。

   構文kill [-シグナル|-s シグナル|-n シグナル] プロセス...kill -l [-v] [シグナル...]

       Kill コマンドでは、POSIX 準拠モードであるかどうかにかかわらずオプションはオペランドより先
       に全て指定しなければなりません。最初のオペランドより後にあるコマンドライン引数は全てオペラ
       ンドとして解釈します。

   説明
       -l オプションを付けずに実行すると、kill コマンドは指定したプロセスにシグナルを送信しま
       す。送信するシグナルの種類はシグナル指定オプションで指定します。シグナルの種類を指定しない
       場合は SIGTERM シグナルを送信します。

       -l オプションを付けて実行すると、kill コマンドは指定したシグナルに関する情報を標準出力に出
       力します。シグナルを指定しない場合は全てのシグナルに関する情報を表示します。

   オプション
       シグナル指定オプション
           -シグナル, -s シグナル, -n シグナル
               送信するシグナルを指定します。シグナルにはシグナル番号とシグナル名のどちらかを指定
               します。シグナル番号として 0 を指定すると、シグナルを送ることができるかどうかの判
               定だけを行い、実際にはシグナルを送信しません。シグナルを名前で指定する際は、大文字
               と小文字の区別はありません。

           シグナル指定オプションは一度に一つまでしか使えません。

       他のオプション
           -l
               シグナルに関する情報を表示します。

           -v
               シグナルに関する情報をより詳しく表示します。-v オプションを指定していない場合は単
               にシグナル名を出力しますが、指定している場合はシグナル番号・シグナル名・シグナルの
               簡単な説明を出力します。

               このオプションを指定したときは同時に -l も指定してあるとみなします。

   オペランド
       プロセス
           シグナルを送信するプロセスをプロセス ID・プロセスグループ ID・ジョブ ID のいずれかで指
           定します。プロセスグループ ID を指定するときは、先頭に負号 (-) を付けます。プロセスと
           して 0 を指定すると、シェルプロセスが属するプロセスグループを指定したものとみなしま
           す。プロセスとして -1 を指定すると、全てのプロセスにシグナルを送信します。

       シグナル
           情報を表示するシグナルの名前または番号です。シグナルによって中断したコマンドの終了ス
           テータスを指定することもできます。

   終了ステータス
       エラーがない限り kill コマンドの終了ステータスは 0 です。一つ以上のプロセスにシグナルを送
       ることができた場合、他にシグナルを送れなかったプロセスがあったとしても終了ステータスは 0
       になります。

   補足
       Kill コマンドは準特殊組込みコマンドです。

       負数に見えるコマンドライン引数の扱いには注意が必要です。例えば kill -1 -2 では -1 がシグナ
       ル指定オプション、-2 がオペランドとなるので、番号 1 のシグナルをプロセスグループ 2 に送信
       します。kill  -1 -2kill -TERM -1 -2 では -1-2 はどちらもオペランドになります。

       POSIX には -v および -n オプションに関する規定はありません。よってこれらのオプションは
       POSIX 準拠モードでは使えません。また POSIX は -s オプションの引数としてシグナル番号を指定
       することを認めていません。POSIX はシグナルのオペランドとしてシグナルの名前を指定することを
       認めていません。

       POSIX は、シグナル名は INTQUIT のように最初の SIG を除いた形で指定しなければならないと
       規定しています。非 POSIX 準拠モードの yash では、拡張として SIG を付けた形でも指定できま
       す。

POPD 組込みコマンド

       Popd 組込みコマンドはディレクトリスタックからディレクトリを削除し、シェルの作業ディレクト
       リを戻します。

   構文popd [インデックス]

   説明
       Popd コマンドはディレクトリスタックからオペランドで指定したインデックスの要素を削除しま
       す。インデックス +0 の要素を削除した場合は、新たにインデックス +0 の要素となったディレクト
       リにシェルの作業ディレクトリを変更し、そのディレクトリ名を標準出力に出力します。

   オペランド
       インデックス
           削除するディレクトリスタックの要素のインデックスです。省略すると +0 を指定したものとみ
           なします。

   終了ステータス
       ディレクトリスタックの要素を正しく削除し作業ディレクトリを変更できた場合、終了ステータスは
       0 です。エラーがあると終了ステータスは非 0 です。

   補足
       ディレクトリスタックに要素が一つしかない場合はそれ以上要素を削除できないので、エラーになり
       ます。

       POSIX には popd コマンドに関する規定はありません。

PRINTF 組込みコマンド

       Printf 組込みコマンドはオペランドを整形して出力します。

   構文printf 書式 [...]

   説明
       Printf コマンドはオペランドで指定した書式に従ってを整形し、標準出力に出力します。Echo コ
       マンドとは異なり、出力の最後には自動的に改行は付きません。

       書式の指定の仕方は C 言語の printf 関数とよく似ています。書式の中では % で始まる変換指定と
       \ で始まるエスケープシーケンスを使用できます。書式に含まれる変換指定とエスケープ以外の文字
       はそのまま出力します。

       変換指定
           変換指定はパーセント記号 (%) から始まります。

           %% 以外の変換指定は、対応する値をとります。変換指定は、値を特定の形式に整形して出力し
           ます。変換指定と値は与えられた順番に対応付けられます。値が余った場合は、全ての値を処理
           し終わるまで書式の整形・出力を繰り返します。値が足りない場合は、空文字列 (文字列に関す
           る変換指定の場合) または 0 (数値に関する変換指定の場合) を仮定します。値が一つも与えら
           れていない場合は、書式は一度だけ出力されます。

           利用可能な変換指定は以下の通りです。

           %d, %i
               整数の値を (符号付き) 十進整数として出力します。

           %u
               整数の値を (符号なし) 十進非負整数として出力します。

           %o
               整数の値を (符号なし) 八進非負整数として出力します。

           %x
               整数の値を小文字の (符号なし) 十六進非負整数として出力します。

           %X
               整数の値を大文字の (符号なし) 十六進非負整数として出力します。

           %f
               実数の値を小文字の (符号付き) 小数として出力します。

           %F
               実数の値を大文字の (符号付き) 小数として出力します。

           %e
               実数の値を小文字の (符号付き) 指数表記小数で出力します。

           %E
               実数の値を大文字の (符号付き) 指数表記小数で出力します。

           %g
               値の大きさや精度に応じて %f%e のどちらかの形式で出力します。

           %G
               値の大きさや精度に応じて %F%E のどちらかの形式で出力します。

           %c
               文字列の値の最初の文字を出力します。

           %s
               文字列の値をそのまま出力します。

           %b
               文字列の値を、エスケープシーケンスを解釈しながら出力します。ここで使えるエスケープ
               シーケンスは echo コマンドで使えるエスケープシーケンスと同じです。

           %%
               パーセント記号 (%) を出力します。

           %g%G では、小数の指数部が -5 以上精度以下の時に %f または %F を、それ以外の時に %e
           または %E を使用します。

           %% 以外の変換指定では、最初の % の直後に変換指定フラグ・フィールド幅・精度をこの順で指
           定できます。これらを指定することで出力の形式を細かく調整できます。

           指定できる変換指定フラグは以下の通りです。フラグを複数指定しても構いません。

           マイナス (-)
               このフラグを指定すると、指定したフィールド幅の中で値を左に寄せて出力します。このフ
               ラグを指定しない場合、値は右に寄ります。

           プラス (+)
               数値の符号 (正号または負号) を必ず出力します。

           空白文字 ( )
               出力する数値に符号 (正号または負号) が付かない場合は、符号の代わりに空白文字を出力
               します。

           #
               値を別形式で出力します。 変換指定が %o の場合、出力する八進数の先頭に必ず一桁以上
               の 0 が付くように、必要に応じて 0 を付加します。 変換指定が %x (または %X) の場
               合、値が 0 でなければ数値の先頭に 0x (または 0X) を付加します。 変換指定が %e, %E,
               %f, %F, %g, %G の場合、小数点の後に数字がない場合でも小数点を省略しないようにしま
               す。また変換指定が %g, %G の場合、小数点の後に 0 以外の数字がない場合でも 0 を省略
               しないようにします。

           ゼロ (0)
               変換指定が %d, %i, %u, %o, %x, %X, %e, %E, %f, %F, %g, %G の場合、出力が指定した
               フィールド幅いっぱいになるまで数値の先頭に 0 を付加します。

               マイナスフラグが指定されている場合、このフラグは無視されます。

               変換指定が %d, %i, %u, %o, %x, %X で、精度が指定されている場合、このフラグは無視さ
               れます。

           フィールド幅は、先頭に 0 の付かない十進整数の形で指定します。

           フィールド幅は出力の最低バイト数を指示します。出力のバイト数がフィールド幅に満たないと
           きは、バイト数がフィールド幅に一致するまで空白文字を付加します。

           精度は、ピリオド (.) の直後に十進整数を置いたものの形で指定します。ピリオドの後に整数
           がなければ、0 が指定してあるものとみなします。

           変換指定が %d, %i, %u, %o, %x, %X の場合、精度は出力の最低桁数を指示します。数値が最低
           桁数に満たない場合は最低桁数に達するまで先頭に 0 を付加します。精度が指定されていない
           場合、精度は 1 とみなします。

           変換指定が %e, %E, %f, %F の場合、精度は小数点以降の桁数を指示します。精度が指定されて
           いない場合、精度は 6 とみなします。

           変換指定が %g, %G の場合、精度は数値の最大有効桁数を指示します。精度が指定されていない
           場合、精度は 6 とみなします。

           変換指定が %s, %b の場合、精度は出力する文字列の最大バイト数を指示します。精度が指定さ
           れていない場合、精度は無限大とみなします。

           変換指定 %f にゼロフラグを指定し、フィールド幅に 8、精度に 3 を指定する場合、最終的な
           変換指定は %08.3f となります。この変換指定に対して値 12.34 を与えると、出力は 0012.340
           となります。

       エスケープシーケンス
           書式の中で使えるエスケープシーケンスは以下の通りです。

           \a
               ベル文字 (ASCII コード番号 7)

           \b
               バックスペース (ASCII コード番号 8)

           \f
               フォームフィード (ASCII コード番号 12)

           \n
               改行文字 (ASCII コード番号 10)

           \r
               復帰文字 (ASCII コード番号 13)

           \t
               水平タブ (ASCII コード番号 9)

           \v
               垂直タブ (ASCII コード番号 11)

           \\
               バックスラッシュ

           \"
               二重引用符

           \'
               一重引用符 (アポストロフィー)

           \xxx
               八進数 xxx (最大三桁) で表わされるコード番号の文字

   オペランド
       書式
           出力する文字列の書式です。

       
           変換指定が出力する値 (数値または文字列) です。

           数値を値として指定する際、一重または二重引用符の後に何か文字を置いたものを指定すること
           で、その文字のコード番号を数値として指定できます。例えば 3 という文字のコード番号が 51
           ならば、 printf '%d' '"3'51 を出力します。

   終了ステータス
       エラーがない限り printf コマンドの終了ステータスは 0 です。

   補足
       POSIX では、マルチバイト文字の扱いについて厳密に定義していません。%s 変換指定で精度を指定
       した場合や、%c 変換指定を使用する場合、値にマルチバイト文字が含まれていると適切な出力が得
       られないかもしれません。Yash では、マルチバイト文字は全てワイド文字に変換してから処理する
       ので、マルチバイト文字の一部のバイトだけが出力されるようなことはありません。

PUSHD 組込みコマンド

       Pushd 組込みコマンドはディレクトリスタックにディレクトリを追加し、シェルの作業ディレクトリ
       をそのディレクトリに変更します。

   構文pushd [-L|-P] [ディレクトリ]

   説明
       Pushd コマンドは cd コマンドと同様に、シェルの作業ディレクトリをオペランドで指定したディレ
       クトリに変更します。作業ディレクトリの変更に成功すると、新しい作業ディレクトリをディレクト
       リスタックに追加します。

   オプション
       Cd コマンドで使えるオプションに加えて以下のオプションが pushd コマンドで使えます。

       --remove-duplicates
           新しい作業ディレクトリが既にディレクトリスタックに入っている場合は、元々入っていた要素
           を削除して重複をなくします。

   オペランド
       ディレクトリ
           新しい作業ディレクトリのパス名です。絶対パスまたは元の作業ディレクトリからの相対パスで
           指定します。

           この値がハイフン一つ (-) の場合、OLDPWD 変数の値が指定されたものとみなします。

           この値が符号付き整数の場合、その整数をディレクトリスタックの要素のインデックスとみなし
           て、その要素が表すディレクトリが指定されたものとみなします (指定された要素はディレクト
           リスタックから削除されます)。

           このオペランドが与えられていない場合、インデックス +1 が指定されたものとみなします
           (--default-directory オプションを指定した場合を除く)。

   終了ステータス
       作業ディレクトリを正しく変更しディレクトリスタックに追加できた場合、終了ステータスは 0 で
       す。エラーがあると終了ステータスは非 0 です。

   補足
       POSIX には pushd コマンドに関する規定はありません。

PWD 組込みコマンド

       Pwd 組込みコマンドはシェルの現在の作業ディレクトリを表示します。

   構文pwd [-L|-P]

   説明
       Pwd コマンドはシェルの現在の作業ディレクトリを絶対パスで標準出力に出力します。

   オプション
       -L, --logical
           PWD 変数の値が現在の作業ディレクトリの絶対パスで、中に ...  を含んでいなけれ
           ば、それを出力します。それ以外の場合は -P を指定した場合と同様に出力します。

       -P, --physical
           現在の作業ディレクトリの絶対パスを、中にシンボリックリンクを含まないかたちで出力しま
           す。

       -L (--logical) オプションと -P (--physical) オプションの両方を指定した場合、後に指定したほ
       うを優先します。どちらも指定していない場合は、-L を指定したものとみなします。

   終了ステータス
       エラーがない限り pwd コマンドの終了ステータスは 0 です。

   補足
       Pwd コマンドは準特殊組込みコマンドです。

READ 組込みコマンド

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

   構文read [-Aer] [-P|-p] 変数名...

   説明
       Read コマンドは標準入力から一行の文字列を読み込み、それを変数に代入します。

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

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

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

   オプション
       -A, --array
           最後に指定した変数を配列にします。分割後の各文字列が配列の要素として設定されます。

       -e, --line-editing
           読み込みに行編集を使用します。

           行編集が有効になるには以下の条件が全て満たされている必要があります:

           •   シェルが対話モードである。

           •   vi または emacs オプションが有効になっている。

           •   標準入力と標準エラーが端末である。

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

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

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

   オペランド
       変数名
           読み込んだ文字列を格納する変数の名前です。

   終了ステータス
       エラーがない限り read コマンドの終了ステータスは 0 です。

       なお、行を完全に読み込む前に入力が終端に達した時は終了ステータスは非 0 になります。

   補足
       Read コマンドは準特殊組込みコマンドです。

       POSIX には -A (--array) オプションに関する規定はありません。よってこのオプションは POSIX
       準拠モードでは使えません。

       PS1 変数をプロンプトとして表示する際、PS1R および PS1S 変数も使用されます。 PS2 についても
       同様です。

READONLY 組込みコマンド

       Readonly 組込みコマンドは読み取り専用の変数または関数を表示・設定します。

   構文readonly [-pxX] [変数[=]...]readonly -f[p] [変数...]

   説明
       Readonly コマンドは typeset コマンドに -gr オプションを付けたものと同じです。その他オプ
       ション・オペランド・終了ステータスは typeset コマンドと同様です。

   補足
       readonly コマンドは特殊組込みコマンドです。

       POSIX には readonly コマンドに関する規定はありますが、オプションは -p しか規定がありませ
       ん。その他のオプションは POSIX 準拠モードでは使えません。また POSIX は -p オプションをオペ
       ランドとともに使うことを認めていません。

RETURN 組込みコマンド

       Return 組込みコマンドは現在実行中の関数またはスクリプトの実行を終了します。

   構文return [-n] [終了ステータス]

   説明
       -n (--no-return) オプションを付けずに return コマンドを実行すると、以下のうち当てはまる動
       作を行います:

       •   関数の実行中の場合は、その関数の実行を終了します。

       •   ドットコマンドでファイルを開いてコマンドを実行している途中の場合は、そのファイルの読み
           込み・実行を終了します。

       •   シェルの初期化スクリプトを実行中の場合は、そのスクリプトの実行を終了します。

       •   トラップを実行中の場合は、そのトラップの実行を終了します。(ただし他のシグナルに関する
           トラップの実行が控えている場合はそれらは通常通り実行されます。)

       •   これ以外の場合は、(対話モードのときを除いて) シェルは終了します。

       -n (--no-return) オプションを付けて return コマンドを実行すると、return コマンドはただ単に
       オペランドで指定されている終了ステータスを返します。

   オプション
       -n, --no-return
           コマンドの実行を中断しません。

   オペランド
       終了ステータス
           Return コマンドの終了ステータスを指定する 0 以上の自然数です。

           このオペランドが与えられていない場合は、return コマンドの直前に実行されたコマンドの終
           了ステータスを用います (ただしトラップを実行中の場合はトラップに入る直前のコマンドの終
           了ステータス)。

   終了ステータス
       Return コマンドの終了ステータスはオペランドで与えられた値です。Return コマンドの終了ステー
       タスは return コマンドが終了する関数・ドットコマンド・初期化スクリプト・シェル自身の終了ス
       テータスにもなります。

   補足
       Return コマンドは特殊組込みコマンドです。

       POSIX では、終了ステータスの値は 0 以上 256 未満でなければならないとしています。Yash では
       拡張として 256 以上の値も受け付けるようになっています。

       POSIX では関数あるいはドットコマンドの実行中以外における return コマンドの動作を定めていま
       せん。

       POSIX には -n (--no-return) オプションに関する規定はありません。よってこのオプションは
       POSIX 準拠モードでは使えません。

SET 組込みコマンド

       Set 組込みコマンドはシェルのオプションの設定と位置パラメータの変更を行います。

   構文set [オプション...] [オペランド...]set -oset +o

       Set コマンドでは、POSIX 準拠モードであるかどうかにかかわらずオプションはオペランドより先に
       全て指定しなければなりません。最初のオペランドより後にあるコマンドライン引数は全てオペラン
       ドとして解釈します。

   説明
       コマンドライン引数を一切与えずに set コマンドを実行すると、現在シェルに設定されている全て
       の変数の一覧をアルファベット順で (コマンドとして解釈可能な形式で) 標準出力に出力します。

       -o を唯一のコマンドライン引数として与えた場合は現在のシェルのオプション設定を一覧にして標
       準出力に出力します。+o を唯一のコマンドライン引数として与えた場合も同様ですが、この場合は
       コマンドとして解釈可能な形式で出力します。

       これ以外の場合は、set コマンドは以下のようにシェルのオプションの設定と位置パラメータの変更
       のどちらかまたは両方の動作を行います。

   オプション
       オプションが一つ以上与えられている場合、set コマンドはそれらの有効・無効を切り替えます。通
       常の形式でオプションを与えると、そのオプションは有効になります。オプションの先頭のハイフン
       (-) の代わりにプラス (+) を付けて指定すると、そのオプションは無効になります。例えば -m-o monitor--monitor はシェルのジョブ制御を有効にし、逆に +m+o monitor++monitor
       はジョブ制御を無効にします。

       長いオプションの名前に含まれる英数字以外の文字は無視され、大文字と小文字の区別はありませ
       ん。例えば --Le-Comp-Debug--lecompdebug に同じです。また長いオプションの名前の先頭に
       no を付けることで、オプションの有効・無効を逆転することができます。例えば --noallexport++allexport に同じく、また ++nonotify--notify に同じです。

       オプションは以下に挙げる形式で指定することができます:

       •   長いオプション (例: --allexport)

       •   引数としてオプション名を指定した -o オプション (例: -o allexport)

       •   一文字のオプション (例: -a)

       ただし全てのオプションが一文字のオプションで指定できるわけではありません。

       利用可能なオプションは以下のとおりです:

       all-export (-a)
           このオプションが有効な時、変数に代入をするとその変数は自動的にエクスポート対象になりま
           す。

       brace-expand
           このオプションはブレース展開を有効にします。

       case-glob
           このオプションが有効な時、パス名展開におけるパターンマッチングは大文字と小文字を区別し
           て行います。このオプションはシェルの起動時に最初から有効になっています。

       clobber (+C)
           このオプションを無効にすると、 > 演算子によるリダイレクトで既存のファイルを上書きする
           ことはできなくなります。このオプションはシェルの起動時に最初から有効になっています。

       cur-async, cur-bg, cur-stop
           これらのオプションは現在のジョブの選択の仕方に影響します。(ジョブ ID 参照)。これらのオ
           プションはシェルの起動時に最初から有効になっています。

       dot-glob
           このオプションが有効な時、パス名展開においてファイル名の先頭のピリオドを特別に扱いませ
           ん。

       emacs
           このオプションは emacs 風行編集を有効にします。

       err-exit (-e)
           このオプションが有効な時、実行したパイプラインの終了ステータスが 0 でなければ、シェル
           は直ちに終了します。ただし、以下の場合を除きます。

           •   そのコマンドが if 文の分岐や while/until 文のループ条件の判定に使われる場合

           •   パイプラインの先頭に !  が付いている場合

           •   パイプラインがサブシェルグルーピング以外の単独の複合コマンドから構成される場合

       exec (+n)
           このオプションが無効な時、シェルはコマンドの解釈だけを行い、実際にはコマンドを実行しま
           せん。このオプションはシェルスクリプトの文法チェックをするのに便利です。このオプション
           はシェルの起動時に最初から有効になっています。対話モードでは、このオプションに関わらず
           コマンドは常に実行されます。

       extended-glob
           このオプションはパス名展開における拡張機能を有効にします。

       glob (+f)
           このオプションが有効なときはシェルはパス名展開を行います。このオプションはシェルの起動
           時に最初から有効になっています。

       hash-on-def (-h)
           このオプションが有効なとき関数を定義すると、直ちにその関数内で使われる各コマンドの
           PATH 検索を行いコマンドのパス名を記憶します。

       hist-space
           このオプションが有効な時は空白で始まる行はコマンド履歴に自動的に追加しません。

       ignore-eof
           このオプションが有効な時、対話モードのシェルに EOF (入力の終わり) が入力されてもシェル
           はそれを無視してコマンドの読み込みを続けます。これにより、誤って Ctrl-D を押してしまっ
           てもシェルは終了しなくなります。

       le-always-rp, le-comp-debug, le-conv-meta, le-no-conv-meta, le-prompt-sp, le-visible-bell
           これらのオプションは行編集の動作に影響します。行編集のオプションを参照してください。

       mark-dirs
           このオプションが有効な時、パス名展開の展開結果においてディレクトリを表すものの末尾にス
           ラッシュを付けます。

       monitor (-m)
           このオプションはジョブ制御を有効にします。シェルを対話モードで起動したときこのオプショ
           ンは自動的に有効になります。

       notify (-b)
           このオプションが有効な時は、バックグラウンドのジョブの実行状態が変化するとシェルは直ち
           にそれを標準エラーに報告します。このオプションは notifyle オプションより優先します。

       notify-le
           このオプションは notify オプションとほぼ同じですが、行編集を行っている最中のみジョブの
           状態変化を報告します。

       null-glob
           このオプションが有効な時、パス名展開でマッチするパス名がないとき元のパターンは残りませ
           ん。

       posixly-correct
           このオプションは POSIX 準拠モードを有効にします。

       trace-all
           このオプションは、補助コマンド実行中も x-trace オプションを機能させるかどうかを指定し
           ます。補助コマンドとは、 COMMAND_NOT_FOUND_HANDLERPROMPT_COMMAND、および
           YASH_AFTER_CD 変数の値として定義され、特定のタイミングで解釈・実行されるコマンドです。
           このオプションはシェルの起動時に最初から有効になっています。

       unset (+u)
           このオプションが有効な時、パラメータ展開で存在しない変数を展開するとエラーにはならず空
           文字列に展開されます。このオプションはシェルの起動時に最初から有効になっています。

       verbose (-v)
           このオプションが有効な時、シェルは読み込んだコマンドをそのまま標準エラーに出力します。

       vi
           このオプションは vi 風行編集を有効にします。対話モードが有効で標準入力と標準エラーがと
           もに端末ならばこのオプションはシェルの起動時に自動的に有効になります。

       x-trace (-x)
           このオプションが有効な時、コマンドを実行する前に展開の結果を標準エラーに出力します。こ
           の出力は、各行頭に PS4 変数の値を展開した結果を付けて示されます。 Trace-all オプション
           も参照してください。

   オペランド
       Set コマンドにオペランドが与えられている場合またはオプションとオペランドを区切るハイフン二
       つ (--, コマンドの引数の構文参照) がコマンドライン引数に入っている場合は、現在の位置パラ
       メータは削除され、与えられたオペランドがそれぞれ新しく位置パラメータになります。ハイフン二
       つが与えられていてかつオペランドがない場合は位置パラメータはなくなります。

   終了ステータス
       オプションの指定が間違っている場合を除き、set コマンドの終了ステータスは 0 です。

   補足
       Set コマンドは特殊組込みコマンドです。

       POSIX 規格に定義されているオプションは限られています。規格の定義では、

       •   --allexport などの長いオプションは使えません。

       •   オプション名に no を付けてオプションを無効にすることはできません。

       •   オプション名に大文字や英字でない記号は使えません。

       規格に定義されているオプションは以下のとおりです:

       •   -a, -o allexport-e, -o errexit-m, -o monitor-C, -o noclobber-n, -o noexec-f, -o noglob-b, -o notify-u, -o nounset-v, -o verbose-x, -o xtrace-h-o ignoreeof-o nolog-o vi

       POSIX ではこのほかに、関数定義をコマンド履歴に登録しないようにする -o nolog オプションを規
       定していますが、yash はこれをサポートしていません。

SHIFT 組込みコマンド

       Shift 組込みコマンドは位置パラメータのいくつかを削除します。

   構文shift [個数]

   説明
       Shift コマンドは位置パラメータのうち最初のいくつかを削除します。削除するパラメータの数はオ
       ペランドで指定します。

   オペランド
       個数
           削除する位置パラメータの個数を指示する 0 以上の自然数です。

           実際の位置パラメータの個数より大きい数を指定するとエラーになります。省略すると 1 を指
           定したものとみなします。

   終了ステータス
       エラーがない限り shift コマンドの終了ステータスは 0 です。

   補足
       Shift コマンドは特殊組込みコマンドです。

       位置パラメータの個数は特殊パラメータ # によって知ることができます。

SUSPEND 組込みコマンド

       Suspend 組込みコマンドはシェルを停止 (サスペンド) します。

   構文suspend [-f]

   説明
       Suspend コマンドはシェルプロセスが属するプロセスグループ内のすべてのプロセスに対して
       SIGSTOP シグナルを送信します。これにより、シグナルを送られた各プロセス (シェル自身を含む)
       は停止 (サスペンド) 状態になります。停止状態になったプロセスは SIGCONT シグナルを受信する
       と実行を再開します。

       シェルが対話モードで、さらにシェルプロセスのプロセスグループ ID がセッションリーダーのプロ
       セス ID に等しいときは、-f (--force) オプションを付けない限りシェルは警告を表示し、シグナ
       ルを送信しません。これはシェルが停止した後実行を再開させることができなくなってしまうのを未
       然に防ぐためです。

   オプション
       -f, --force
           警告を無視してシェルを停止します。

   終了ステータス
       Suspend コマンドの終了ステータスは、SIGSTOP シグナルをシェルに正しく送信できたときは 0、そ
       れ以外なら非 0 です。

   補足
       POSIX には suspend コマンドに関する規定はありません。

TEST 組込みコマンド

       Test 組込みコマンドは引数で指定した内容の判定を行います。

   構文test 判定式[ 判定式 ]

       Test コマンドはオプションとオペランドとを区別しません。コマンドライン引数は全て判定式とし
       て解釈します。コマンドが [ の名前で実行された時は、判定式の後に ] が必要です。

   説明
       Test コマンドは引数で与えられた判定式を評価し、結果が真ならば 0 の終了ステータスを、偽なら
       ば 1 の終了ステータスで終了します。判定式は何種類かの演算子とそれに対する被演算子とからな
       ります。

       ファイルに関する判定を行う単項演算子は以下の通りです。指定したファイルがシンボリックリンク
       の場合、そのシンボリックリンクが指している先のファイルについて判定を行います (-h, -L 演算
       子を除く)。

       -b ファイル
           ファイルがブロックスペシャルファイルかどうか

       -c ファイル
           ファイルがキャラクタスペシャルファイルかどうか

       -d ファイル
           ファイルがディレクトリかどうか

       -e ファイル
           ファイルが存在するかどうか

       -f ファイル
           ファイルが通常のファイルかどうか

       -G ファイル
           ファイルのグループ ID がシェルの実効グループ ID に等しいかどうか

       -g ファイル
           ファイルの set-group-ID ビットが設定されているかどうか

       -h ファイル
           -L ファイル に同じ

       -k ファイル
           ファイルの sticky ビットが設定されているかどうか

       -L ファイル
           ファイルがシンボリックリンクかどうか

       -N ファイル
           ファイルの最終変更日時が最終アクセス日時より後かどうか

       -O ファイル
           ファイルのユーザ ID がシェルの実効ユーザ ID に等しいかどうか

       -p ファイル
           ファイルが FIFO (名前付きパイプ) かどうか

       -r ファイル
           ファイルが読み込み可能かどうか

       -S ファイル
           ファイルがソケットかどうか

       -s ファイル
           ファイルサイズが空でないかどうか

       -u ファイル
           ファイルの set-user-ID ビットが設定されているかどうか

       -w ファイル
           ファイルが書き込み可能かどうか

       -x ファイル
           ファイルが実行可能かどうか

       ファイル記述子に関する判定を行う単項演算子は以下の通りです。

       -t ファイル記述子
           ファイル記述子が端末かどうか (ファイル記述子は 0 以上の自然数で指定します)

       文字列に関する判定を行う単項演算子は以下の通りです。

       -n 文字列
           文字列が空文字列でないかどうか

       -z 文字列
           文字列が空文字列かどうか

       シェルのオプションに関する判定を行う単項演算子は以下の通りです。

       -o ?オプション
           オプションが正しいオプション名であるかどうか

       -o オプション
           オプションが正しいオプション名であり、かつオプションが有効に設定されているかどうか

       ファイルに関する判定を行う二項演算子は以下の通りです (存在しないファイルは他のファイルより
       古いとみなします)。

       ファイル1 -nt ファイル2
           ファイル1の更新時刻がファイル2より新しいかどうか

       ファイル1 -ot ファイル2
           ファイル1の更新時刻がファイル2より古いかどうか

       ファイル1 -ef ファイル2
           二つのファイルが互いのハードリンクであるかどうか

       文字列に関する判定を行う二項演算子は以下の通りです。

       文字列1 = 文字列2
           二つの文字列が同じかどうか

       文字列1 != 文字列2
           二つの文字列が異なるかどうか

       以下の二項演算子は現在のロケールの辞書式順序に従って文字列を比較します。

       文字列1 === 文字列2
           二つの文字列が同じかどうか

       文字列1 !== 文字列2
           二つの文字列が異なるかどうか

       文字列1 < 文字列2
           文字列1文字列2 よりも順序が手前かどうか

       文字列1 <= 文字列2
           文字列1文字列2 よりも順序が手前または同じかどうか

       文字列1 > 文字列2
           文字列1文字列2 よりも順序が後かどうか

       文字列1 >= 文字列2
           文字列1文字列2 よりも順序が後または同じかどうか

       パターンマッチングを行う二項演算子は以下の通りです。

       文字列 =~ パターン
           拡張正規表現パターン文字列にマッチするかどうか

       整数に関する判定を行う二項演算子は以下の通りです。

       v1 -eq v2
           v1v2 が等しいかどうか

       v1 -ne v2
           v1v2 が異なるかどうか

       v1 -gt v2
           v1v2 よりも大きいかどうか

       v1 -ge v2
           v1v2 以上かどうか

       v1 -lt v2
           v1v2 よりも小さいかどうか

       v1 -le v2
           v1v2 以下かどうか

       バージョン番号を表す文字列に関する判定を行う二項演算子は以下の通りです。文字列のバージョン
       番号としての比較のしかたは後述します。

       v1 -veq v2
           v1v2 が等しいかどうか

       v1 -vne v2
           v1v2 が異なるかどうか

       v1 -vgt v2
           v1v2 よりも大きいかどうか

       v1 -vge v2
           v1v2 以上かどうか

       v1 -vlt v2
           v1v2 よりも小さいかどうか

       v1 -vle v2
           v1v2 以下かどうか

       他の判定式を組み合わせてより複雑な判定式を作る演算子は以下の通りです。

       ! 判定式
           判定式が偽かどうか (判定式の真偽を逆転します)

       ( 判定式 )
           判定式が真かどうか (判定式の構文上の優先順位を高くします)

       判定式1 -a 判定式2
           二つの判定式が両方とも真かどうか

       判定式1 -o 判定式2
           二つの判定式の少なくとも片方が真かどうか

       判定式が空の場合、結果は偽とみなします。判定式が (演算子の付いていない) 文字列一つの場
       合、その文字列が空文字列でないかどうかを判定します。

       バージョン番号の比較
           文字列のバージョン番号としての比較は、基本的には現在のロケール情報に従った辞書式順序で
           行います。ただし、連続する数字は一つの自然数として比較します。また数字とそれ以外の文字
           との比較では常に数字の方が大きいとみなします。

           例えば、0.1.2-300.001.02-3 は等しく、0.2.10.10.0 とでは後者の方が大きいと判定
           されます。

   終了ステータス
       Test コマンドの終了ステータスは、判定式の評価結果が真ならば 0、偽ならば 1 です。判定式の構
       文に誤りがある場合その他のエラーが発生したときは、終了ステータスは 2 です。

   補足
       複雑な判定式は誤って解釈されることがあるので避けることをお勧めします。例えば [ 1 -eq 1 -a
       -t = 1 -a ! foo ][ 1 -eq 1 ] && [ -t = 1 ] && ! [ foo ] のようにコマンドを分けると式が
       より明確になります。

       POSIX は、エラーが発生した場合の終了ステータスを 『2 以上』 と定めています。また POSIX に
       は以下の演算子の規定はありません: -nt, -ot, -ef, ==, ===, !==, <, <=, >, >=, =~, -veq,
       -vne, -vgt, -vge, -vlt, -vle。 POSIX に -o の単項演算子としての規定はありません。

TIMES 組込みコマンド

       Times 組込みコマンドはシェルとシェルが起動したコマンドが消費した CPU 時間を表示します。

   構文times

   説明
       Times コマンドはシェルプロセスとその子プロセスが消費した CPU 時間を標準出力に出力しま
       す。一行目にシェルプロセス自身がユーザモードおよびシステムモードで消費した CPU 時間をそれ
       ぞれ表示します。二行目にシェルの全ての子孫プロセス (親プロセスが wait していないものを除
       く) がユーザモードおよびシステムモードで消費した CPU 時間をそれぞれ表示します。

   終了ステータス
       エラーがない限り times コマンドの終了ステータスは 0 です。

   補足
       Times コマンドは特殊組込みコマンドです。

TRAP 組込みコマンド

       Trap 組込みコマンドはシェルがシグナルを受信したときの動作を設定します。

   構文traptrap 動作 シグナル...trap シグナル番号 [シグナル...]trap -p [シグナル...]

   説明
       Trap コマンドはシェルプロセスがシグナルを受信したときの動作 (トラップ) を表示または設定し
       ます。

       オペランドに動作シグナルを指定して trap コマンドを実行すると、シェルがシグナルを受信した
       際に指定した動作を行うようになります。最初のオペランドがシグナル番号の場合、それと残りの
       グナルに対する動作は、動作として - が指定されたときと同様に標準の動作に設定されます。

       -p (--print) オプションを指定した場合またはオペランドを一つも指定していない場合は、trap コ
       マンドは現在のトラップの設定状況をコマンドとして解釈可能な形式で標準出力に出力します。シグ
       ナルが与えられているときはそのシグナルに関する設定を、与えられていないときは全ての設定を出
       力します。ただし、特定の状況では trap コマンドは現在の設定ではなく以前の設定を表示します
       (下記補足参照)。

   オプション
       -p, --print
           現在のトラップの設定を表示します。

   オペランド
       動作
           シグナルを受信した際の動作を指定します。動作がハイフン一つ (-) ならば、シェルはシステ
           ムで規定された標準の動作を行います。動作が空文字列ならば、シェルはシグナルを無視しま
           す。それ以外の値を指定すると、シェルはこのオペランドをコマンドとみなして、シグナル受信
           時にこれを解釈・実行します (コマンドの実行中にシグナルを受信したときは、コマンドが終了
           した後にトラップを実行します)。

       シグナル
           動作の対象となるシグナルです。シグナルはシグナル番号とシグナル名のどちらかで指定しま
           す。

           シグナルとして 0 または EXIT を指定すると、これはシェルの終了時に発生する仮想のシグナ
           ルを指定しているとみなします。この仮想のシグナルに対して設定された動作は、シェルが正常
           終了する直前に実行されます。

       シグナル番号
           シグナルと同様ですが、シグナルを番号で指定します。

   終了ステータス
       トラップが正しく設定または表示されたときは終了ステータスは 0 です。エラーがあると終了ス
       テータスは非 0 です。

   補足
       Trap コマンドは特殊組込みコマンドです。

       POSIX は、シグナル名は INTQUIT のように最初の SIG を除いた形で指定しなければならないと
       規定しています。Yash では、拡張として SIG を付けた形でも指定できますし、シグナル名の大文字
       と小文字を区別しません (このような拡張は POSIX でも認められています)。

       出力の再利用
           Trap コマンドが出力したトラップの設定を変数に保存しておき、後で eval コマンドでそれを
           実行することで元のトラップの設定を復活させることができます。

               saved_trap=$(trap)
               trap '...' INT
               eval "$saved_trap"

           ただし、このテクニックの挙動には裏があります。Trap コマンドの出力を変数に保存するため
           にコマンド置換を使用しますが、コマンド置換はサブシェルで実行されます。サブシェルの開始
           時にトラップの設定は解除されるため、本来ならばサブシェル内の trap コマンドは何も出力せ
           ず、結果として変数にはトラップが保存されないことになります。

           この問題を回避するため、POSIX は以下のうちどちらかの挙動を執ることをシェルに求めていま
           す。

           •   コマンド置換の中身がただ一つの trap コマンドである場合は、そのコマンド置換を実行す
               るサブシェルの開始時にトラップ設定を解除しない。

           •   サブシェルの開始時にトラップ設定を解除する際に、以前の設定を憶えておく。サブシェル
               内で trap コマンドがトラップ設定を出力する際、まだそのサブシェル内で別の trap コマ
               ンドがトラップ設定を変更していなければ、憶えておいた以前の設定を出力する。

           Yash は二つ目の選択肢に従います。

TRUE 組込みコマンド

       True 組込みコマンドは何も行わずに 0 の終了ステータスで終了します。

   構文true

   説明
       True コマンドは何も行いません。コマンドライン引数は一切無視します。

   終了ステータス
       True コマンドの終了ステータスは 0 です。

   補足
       True コマンドは準特殊組込みコマンドです。

       コロンコマンドは true コマンドと同様に何も行いませんが、true コマンドは準特殊組込みコマン
       ドであるのに対しコロンコマンドは特殊組込みコマンドです。

TYPE 組込みコマンド

       Type 組込みコマンドはコマンドの種類を特定します。

   構文type [-abefkp] [コマンド...]

   説明
       Type コマンドは command コマンドに -V オプションを付けたものと同じです。その他オプション・
       オペランド・終了ステータスは command コマンドと同じです。

   補足
       POSIX では、type コマンドと command コマンドとの関係について規定していません。従って他の
       シェルの type コマンドは command コマンドに -V オプションを付けたものとは異なる動作をする
       ことがあります。また POSIX は type コマンドのオプションを規定していません。

       POSIX 準拠モードでは少なくとも一つコマンドを指定する必要があります。

TYPESET 組込みコマンド

       Typeset 組込みコマンドは変数または関数を表示・設定します。

   構文typeset [-gprxX] [変数[=]...]typeset -f[pr] [関数...]

   説明
       -f (--functions) オプションを付けずに実行すると、typeset コマンドは変数を出力または設定し
       ます。-f (--functions) オプションを付けて実行すると、typeset コマンドは関数を出力または設
       定します。

       -p (--print) オプションを付けて実行すると、typeset コマンドはオペランドで指定した変数また
       は関数を標準出力に出力します。-p (--print) オプションを付けずに実行すると、typeset コマン
       ドはオペランドで指定した変数または関数を設定します。オペランドを一つも与えずに実行する
       と、-p (--print) オプションの有無にかかわらず typeset コマンドは全ての変数または関数を出力
       します (このとき -g (--global) オプションがあれば本当にすべての変数を、そうでないときは
       ローカル変数だけを出力します)。

   オプション
       -f, --functions
           変数ではなく関数を表示または設定します。

       -g, --global
           このオプションを指定すると、新しく変数を作成する場合その変数をグローバル変数としま
           す。すなわち変数は関数の実行が終わっても残ります。このオプションを指定しない場合、設定
           する変数はローカル変数になります。

           オペランドがない場合は、このオプションを指定していると全ての変数を出力します。このオプ
           ションを指定していないとローカル変数だけ出力します。

       -p, --print
           変数または関数の定義を (コマンドとして解釈可能な形式で) 出力します。

       -r, --readonly
           設定する変数・関数を読み取り専用にします。読み取り専用の変数・関数は、値を変更したり削
           除したりできなくなります。

           変数・関数を出力する際は、読み取り専用の変数・関数だけ出力します。

       -x, --export
           設定する変数をエクスポート対象にします。

           変数を出力する際は、エクスポート対象の変数だけ出力します。

       -X, --unexport
           設定する変数をエクスポート対象から外します。

   オペランド
       変数
           出力または設定する変数の名前です。

           変数が既に存在する場合、変数の値は変わりません。存在しない変数を指定した場合、変数は存
           在するがその値は存在しない状態になります (このような変数はパラメータ展開では存在しない
           変数として扱います)。

       変数=
           設定する変数の名前とその値です。

           指定したが変数の値として設定されます。この形式のオペランドでは、-p (--print) オプ
           ションを指定したときでもこの変数は出力ではなく設定されます。

       関数
           出力または設定する関数の名前です。存在しない関数を指定することはできません。

   終了ステータス
       エラーがない限り typeset コマンドの終了ステータスは 0 です。

   補足
       既にローカル変数が存在する場合、それを無視してグローバル変数を新しく作ることはできません
       (-g (--global) オプションを指定していても既存のローカル変数が再設定されます)。

       POSIX には typeset コマンドに関する規定はありません。

       Export コマンドは typeset コマンドに -gx オプションを付けたものと同じです。Readonly コマン
       ドは typeset コマンドに -gr オプションを付けたものと同じです。

ULIMIT 組込みコマンド

       Ulimit 組込みコマンドはシェルプロセスのリソース制限を表示・設定します。

   構文ulimit -a [-H|-S]ulimit [-H|-S] [-efilnqrstuvx] []

   説明
       Ulimit コマンドはシェルプロセスのリソース制限値を表示または設定します。

       -a (--all) オプションを付けて実行すると、ulimit コマンドは全ての種類のリソースについて現在
       の制限値を一覧形式で標準出力に出力します。-a (--all) オプションを付けないで実行すると、一
       種類のリソースについて制限値を表示または設定します。オペランドでを指定している場合、その
       値に制限値を設定します。を指定していない場合は現在の制限値を標準出力に出力します。表示・
       設定するリソースの種類はオプションで指定します。設定したリソースの制限値はシェルが起動する
       各コマンドに受け継がれます。

       リソースの各種類について、ハードリミットソフトリミットの二種類の制限値があります。ソフト
       リミットがハードリミットを超えることはできません。またハードリミットを緩めるには専用の権限
       が必要です。

       -H (--hard) オプションを指定している場合、ulimit コマンドはハードリミットを表示または設定
       します。-S (--soft) オプションを指定している場合、ulimit コマンドはソフトリミットを表示ま
       たは設定します。どちらのオプションも指定してない場合、ulimit コマンドはソフトリミットのみ
       を表示するかまたはハードリミットとソフトリミットの両方を設定します。

   オプション
       -H, --hard
           ハードリミットを表示または設定します。

       -S, --soft
           ソフトリミットを表示または設定します。

       -a, --all
           全種類のリソース制限値を表示します。

       以下のオプションは表示・設定するリソースの種類を指定します。これらのオプションがどれも与え
       られていないときは、-f が与えられたものとみなします。(表示・設定可能なリソースの種類はシス
       テムによって異なります)

       -c, --core
           プロセスが強制終了させられたときにできるコアファイルのサイズの限界 (512 バイト単位)

       -d, --data
           プロセスが使用できるデータセグメント領域のサイズの限界 (キロバイト単位)

       -e, --nice
           スケジューリング優先度 (nice 値) の限界

       -f, --fsize
           プロセスが作成できるファイルのサイズの限界 (512 バイト単位)

       -i, --sigpending
           プロセスの処理待ちシグナルの個数の限界

       -l, --memlock
           RAM 上にロック可能なメモリサイズの限界 (キロバイト単位)

       -m, --rss
           プロセスの resident set (RAM 上に存在する仮想ページ) の数の限界 (キロバイト単位)

       -n, --nofile
           プロセスが使用できるファイル記述子の最大値 + 1

       -q, --msgqueue
           POSIX メッセージキューのサイズの限界

       -r, --rtprio
           リアルタイムスケジューリングの優先度の限界

       -s, --stack
           プロセスが使用できるスタック領域のサイズの限界 (キロバイト単位)

       -t, --cpu
           プロセスが使用できる CPU 時間の限界 (秒単位)

       -u, --nproc
           プロセスが起動できる子プロセスの個数の限界

       -v, --as
           プロセスが使用できるメモリ領域全体のサイズの限界 (キロバイト単位)

       -x, --locks
           プロセスがロックできるファイルの個数の限界

   オペランド
       
           設定するリソース制限値です。

           値は基本的に 0 以上の自然数で指定しますが、自然数の代わりに hardsoftunlimited のい
           ずれかの文字列を指定することもできます。これらの文字列はそれぞれ現在のハードリミットの
           値、現在のソフトリミットの値、無制限を表します。

   終了ステータス
       リソース制限値が正しく出力または設定できたときは、終了ステータスは 0 です。エラーがあると
       終了ステータスは非 0 です。

   補足
       POSIX が規定しているオプションは -f だけです。また POSIX はオペランドのとして自然数しか
       規定していません。

UMASK 組込みコマンド

       Umask 組込みコマンドはシェルプロセスのファイルモード作成マスクを表示・設定します。

   構文umask マスクumask [-S]

   説明
       オペランドが与えられていないとき、umask コマンドはシェルプロセスの現在のファイルモード作成
       マスクを標準出力に出力します。-S (--symbolic) オプションで出力の形式を指定できます。出力は
       オペランドとして再利用可能な形式になっています。

       オペランドが与えられているとき、umask コマンドはシェルプロセスのファイルモード作成マスクを
       与えられたオペランドの値に設定します。

   オプション
       -S, --symbolic
           このオプションが指定されているときは、記号形式でファイルモード作成マスクを出力しま
           す。このオプションが指定されていないときは、数値形式で出力します。

   オペランド
       マスク
           このオペランドが与えられているときは、umask コマンドはファイルモード作成マスクをこの値
           に設定します。値は以下に述べる数値形式と記号形式のどちらかで与えます。

       数値形式
           数値形式は 0 以上の八進整数でマスクを指定します。これは以下の各モードを表す自然数のい
           くつかの和です。

           0400
               ユーザの読み取り権限

           0200
               ユーザの書き込み権限

           0100
               ユーザの実行権限

           0040
               グループの読み取り権限

           0020
               グループの書き込み権限

           0010
               グループの実行権限

           0004
               その他の読み取り権限

           0002
               その他の書き込み権限

           0001
               その他の実行権限

       記号形式
           記号形式は以下のような書式の記号列でマスクしない権限を指定します。

           記号列は一つ以上のをカンマ (,) で区切ったものです。 対象の列と一つ以上の動作から
           なります。

           対象には以下の記号をいくつでも指定できます。

           u
               ユーザ

           g
               グループ

           o
               その他

           a
               ユーザ・グループ・その他の全て

           対象が一つも指定されていない場合は a が指定されているものとみなします。

           動作は以下の演算子権限の組み合わせです。 演算子は以下のどれかです。

           =
               対象に対する設定を権限にします。

           +
               対象に対する設定に権限を加えます。

           -
               対象に対する設定から権限を除きます。

           権限は以下のどれかです。

           r
               読み取り権限

           w
               書き込み権限

           x
               実行権限

           X
               実行権限 (元々実行権限が設定されていた場合のみ)

           s
               Set-user-ID, Set-group-ID

           u
               現在のユーザの値

           g
               現在のグループの値

           o
               現在のその他の値

           r, w, x, X, s の記号同士は一度に組み合わせて指定できます。

           例えば umask u=rwx,go+r-w を実行すると、ユーザの読み取り権限と書き込み権限と実行権限を
           マスクしないようにし、グループとその他の読み取り権限をマスクしないようにし、グループと
           その他の書き込み権限をマスクするようにします。

   終了ステータス
       ファイルモード作成マスクが正しく出力または設定できたときは、終了ステータスは 0 です。エ
       ラーがあると終了ステータスは非 0 です。

   補足
       Ulimit コマンドは準特殊組込みコマンドです。

       POSIX は -S オプションを指定しなかった場合の出力形式が必ずしも数値形式であるとは規定してい
       ません。

UNALIAS 組込みコマンド

       Unalias 組込みコマンドはエイリアスを削除します。

   構文unalias エイリアス名...unalias -a

   説明
       Unalias コマンドはオペランドで指定したエイリアスを削除します。

   オプション
       -a, --all
           全てのエイリアスを削除します。

   オペランド
       エイリアス名
           削除するエイリアスの名前です。

   終了ステータス
       エラーがない限り unalias コマンドの終了ステータスは 0 です。存在しないエイリアスをオペラン
       ドで指定した場合はエラーになります。

   補足
       Unalias コマンドは準特殊組込みコマンドです。

UNSET 組込みコマンド

       Unset 組込みコマンドは変数または関数を削除します。

   構文unset [-fv] [名前...]

   説明
       Unset コマンドはオペランドで指定した名前の変数または関数を削除します。

       元々存在しない変数・関数を削除しようとしても、何も起こりません (エラーにはなりません)。

   オプション
       -f, --functions
           関数を削除します。

       -v, --variables
           変数を削除します。

       -f (--functions) オプションと -v (--variables) オプションの両方を指定した場合、後に指定し
       たほうを優先します。どちらも指定していない場合は、-v を指定したものとみなします。

   オペランド
       名前
           削除する変数または関数の名前です。

   終了ステータス
       エラーがない限り unset コマンドの終了ステータスは 0 です。

   補足
       Unset コマンドは特殊組込みコマンドです。

       POSIX では、-f-v のどちらのオプションも指定されていない場合、指定した名前の変数がない
       場合はかわりにその名前の関数を削除してよいと規定しています。

       POSIX 準拠モードでは少なくとも一つ名前を指定する必要があります。

WAIT 組込みコマンド

       Wait 組込みコマンドはバックグラウンドのジョブが終了するのを待ちます。

   構文wait [ジョブ...]

   説明
       Wait コマンドは実行中のバックグラウンドジョブが終了するのを待ちます。ジョブ制御が有効な時
       は、ジョブが停止したときも終了したとみなします。

       Wait コマンドはジョブ制御が有効でないときでも非同期コマンドの終了を待つのに使えます。

       Wait コマンドの実行中にシェルがシグナルを受信した場合、そのシグナルに対しトラップが設定し
       てあればそのトラップを直ちに実行し wait コマンドはそのまま終了します。またジョブ制御が有効
       な場合、シェルが SIGINT シグナルを受信すると wait コマンドは中断されます。

   オペランド
       ジョブ
           終了を待つジョブ・非同期コマンドのジョブ ID またはプロセス ID です。

       ジョブを何も指定しないとシェルが有する全てのジョブ・非同期コマンドの終了を待ちます。

       存在しないジョブ・非同期コマンドを指定すると、終了ステータス 127 で既に終了したジョブをし
       たものとみなし、エラーにはしません。

   終了ステータス
       ジョブが一つも与えられておらず、シェルが全てのジョブ・非同期コマンドの終了を正しく待つこと
       ができた場合、終了ステータスは 0 です。ジョブが一つ以上与えられているときは、最後のジョブ
       の終了ステータスが wait コマンドの終了ステータスになります。

       Wait コマンドがシグナルによって中断された場合、終了ステータスはそのシグナルを表す 128 以上
       の整数です。その他の理由で wait コマンドがジョブの終了を正しく待つことができなかった場
       合、終了ステータスは 1 以上 126 以下です。

   補足
       Wait コマンドは準特殊組込みコマンドです。

       非同期コマンドのプロセス ID は非同期コマンドを実行した直後に特殊パラメータ ! の値を見るこ
       とで知ることができます。ジョブ制御が有効なときは jobs コマンドでプロセス ID を調べることも
       できます。

著者

       渡邊 裕貴[FAMILY Given] <magicant@users.osdn.me>
           著者.

  2.39                                      2015-08-26                                    YASH(1)