/usr/bin/bash
bash - GNU Bourne-Again SHell
SYNOPSIS
bash [options] [command_string | file]
COPYRIGHT
Bash is Copyright (C) 1989-2020 by the Free Software Foundation, Inc.
DESCRIPTION
Bashはsh互換のコマンド言語インタプリタであり、標準入力やファイルから読み込んだコマンドを実行する。 Bashには、KornシェルやCシェル(kshやcsh)の便利な機能も組み込まれている。
Bashは、IEEE POSIX仕様(IEEE Standard 1003.1)のシェルとユーティリティの部分に準拠した実装を意図している。 BashはデフォルトでPOSIXに準拠するように設定できる。
OPTIONS
-oを含め、set組み込みコマンドの説明で文書化されている1文字のシェル・オプションはすべて、シェル起動時のオプションとして使用できる。 さらに、bashは起動時に以下のオプションを解釈する:
- -c
- オプションがある場合、コマンドは最初の非オプション引数 command_string から読み込まれる。 -cオプションがある場合、コマンドは最初のオプション以外の引数command_stringから読み込まれる。command_stringの後に引数がある場合、最初の引数は$0に代入され、残りの引数は位置パラメーターに代入される。0への代入は、シェルの名前を設定し、警告やエラーメッセージで使われる。
- -i
- オプションを指定すると、シェルは対話型になる。
- -l
- bash をログイン・シェルとして起動したかのように動作させる(後述の INVOCATION を参照)。
- -r
- オプションを指定すると、シェルが制限される(後述のRESTRICTED SHELL を参照)。
- -s
- オプションがある場合、またはオプション処理後に引数が残っていない場合、コマンドは標準入力から読み込まれる。 このオプションにより、対話型シェルを起動するときや、 パイプ経由で入力を読み込むときに、位置パラメーターを設定できる。
- -v
- 読み込まれたシェル入力行を表示する。
- -x
- 実行されたコマンドとその引数を表示する。
- -D
- $で始まるすべての二重引用符付き文字列のリストを標準出力に出力する。
これらは、現在のロケールがCでもPOSIXでもない場合に言語変換の対象となる文字列である。 これは-nオプションを意味し、コマンドは実行されない。
- [-+]O [shopt_option]
- shopt_optionは、shopt組み込み関数が受け付けるシェル・オプションの1つである(後述のSHELL BUILTIN COMMANDS 参照)。 shopt_option が存在する場合、-O はそのオプションの値を設定する;
- +Oで設定を解除する。 shopt_option が与えられない場合、 shopt が受け付けるシェルオプションの名前と値が標準出力に表示される。 起動オプションが +O の場合、出力は入力として再利用できる形式で表示される。
- -- はオプションの終了を知らせ、それ以降のオプション処理を無効にする。 の後の引数は、ファイル名と引数として扱われる。 '-'の引数は--と等価である。
Bashは、複数文字のオプションも解釈する。 これらのオプションは、1文字のオプションよりも前にコマンドラインに現れなければ認識されない。
- --debugger
- シェルが起動する前にデバッガ・プロファイルが実行されるようにする。 拡張デバッグモードをオンにする(以下のshopt組み込み関数へのextdebugオプションの説明を参照のこと)。
- --dump-po-strings
- -D と同等だが、出力は GNU gettext po (portable object) ファイル形式になる。
- --dump-strings
- -Dと同等である。
- --help Display a usage message on standard output and exit successfully.
- --init-file file
- --rcfile file
- シェルが対話型の場合、システム全体の初期化ファイル/etc/bash.bashrcと標準の個人用初期化ファイル~/.bashrcの代わりに、ファイルからコマンドを実行する(下記のINVOCATION を参照)。
- --login
- -lと同等である。
- --noediting
- シェルが対話型の場合、GNU readline ライブラリを使ってコマンドラインを読まない。
- --noprofile
- システム全体の起動ファイル/etc/profileや、個人用の初期化ファイル~/.bash_profile、~/.bash_login、~/.profileを読み込まない。 デフォルトでは、bashはログイン・シェルとして起動されたときにこれらのファイルを読み込む(後述のINVOCATION を参照)。
- --norc
- シェルが対話型の場合、システム全体の初期化ファイル/etc/bash.bashrcと個人の初期化ファイル~/.bashrcを読み込んで実行しない。 シェルが sh として起動された場合、このオプションはデフォルトでオンになる。
- --posix
- デフォルトの動作がPOSIX標準と異なるbashの動作を標準に合わせるように変更する(posixモード)。 posixモードがbashの動作にどのような影響を与えるかについての詳細は、後述のSEE ALSO を参照のこと。
- --restricted
- シェルが制限された状態になる(下記のRESTRICTED SHELL を参照)。
- --verbose
- -vと同等である。
- --version
- bashのバージョン情報を標準出力に表示し、正常終了する。
ARGUMENTS
オプション処理後に引数が残り、-cオプションも-sオプションも指定されていない場合、最初の引数はシェルコマンドを含むファイル名とみなされる。 この方法でbashが起動されると、$0にファイル名が設定され、位置パラメーターに残りの引数が設定される。 Bashはこのファイルからコマンドを読み込んで実行し、終了する。Bashの終了ステータスは、スクリプト内で最後に実行されたコマンドの終了ステータスである。 コマンドが実行されなかった場合、 まず、カレントディレクトリのファイルを開こうとし、ファイルが見つからなければ、PATH内のディレクトリからスクリプトを探す。
INVOCATION
ログインシェルとは、引数ゼロの最初の文字が - であるシェル、または --login オプションで起動されるシェルのことである。
対話型シェルとは、(-s が指定されていない限り) オプション以外の引数を指定せず、かつ -c オプションを指定せずに、標準入力と標準エラーが (isatty(3) によって決定される) 端末に接続されているシェル、または -i オプションで起動されるシェルのことである。 PS1が設定され、$-がiに含まれるのは、bashが対話型である場合であり、シェル・スクリプトやスタートアップ・ファイルがこの状態をテストできるようにするためである。
以下の段落では、bashが起動ファイルをどのように実行するかを説明する。 ファイルが存在するが読み込めない場合、bashはエラーを報告する。 チルダは、後述のEXPANSIONセクションの「チルダの展開」で説明するように、ファイル名で展開される。
bashが対話型ログイン・シェルとして、または-loginオプションを指定して非対話型シェルとして起動されると、まず/etc/profileファイルが存在する場合は、そのファイルからコマンドを読み込んで実行する。 このファイルを読み込んだ後、~/.bash_profile、~/.bash_login、~/.profileの順に探し、最初に存在し、読み取り可能なものからコマンドを読み取って実行する。 シェルの起動時に--noprofileオプションを使用すると、この動作を抑制することができる。
対話型ログイン・シェルが終了するとき、または非対話型ログイン・シェルがexit組み込みコマンドを実行するとき、bashは~/.bash_logoutファイルが存在すればそこからコマンドを読み込んで実行する。
ログイン・シェルではない対話型シェルが起動されると、bashは/etc/bash.bashrcと~/.bashrcが存在する場合、これらのファイルからコマンドを読み込んで実行する。 これは--norcオプションを使うことで抑制できる。 rcfileファイル・オプションを指定すると、/etc/bash.bashrcや~/.bashrcではなく、ファイルからコマンドを読み込んで実行するようになる。
シェル・スクリプトを実行する場合など、bashが非対話的に起動されると、環境変数BASH_ENVを探し、その値があれば展開し、展開された値を読み込んで実行するファイル名として使用する。 Bashは以下のコマンドが実行されたかのように振る舞う:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
とする。しかし、PATH変数の値はファイル名の検索には使われない。
bashがshという名前で起動された場合、POSIX標準にも準拠しながら、過去のバージョンのshの起動時の動作をできるだけ忠実に模倣しようとする。 対話型ログインシェルとして起動された場合、または--loginオプションを指定した非対話型シェルとして起動された場合、まず/etc/profileと~/.profileの順にコマンドを読み込んで実行しようとする。 noprofileオプションを使用すると、この動作を抑制することができる。 対話型シェルとしてshという名前で起動されると、bashは変数ENVを探し、その値が定義されていれば展開し、展開された値を読み込み実行するファイル名として使用する。 shとして起動されたシェルは、他の起動ファイルからコマンドを読み込んで実行しようとはしないので、--rcfileオプションは効果がない。 shという名前で起動された非対話型シェルは、他の起動ファイルを読み込もうとしない。 shとして起動された場合、bashはスタートアップ・ファイルを読み込んだ後にposixモードに入る。
posix コマンドラインオプション --posix のように bash が posix モードで起動されると、スタートアップファイルの POSIX 標準に従う。 このモードでは、対話型シェルはENV変数を展開し、展開された値を名前とするファイルからコマンドが読み込まれ実行される。 他のスタートアップ・ファイルは読み込まれない。
Bashは、リモートシェルデーモン(通常はrshd)またはセキュアシェルデーモンsshdによって実行されるときのように、標準入力がネットワーク接続に接続された状態で実行されているかどうかを判断しようとする。 bashがこの方法で実行されていると判断した場合、~/.bashrcと~/.bashrcが存在し、これらのファイルが読み取り可能であれば、これらのファイルからコマンドを読み取り、実行する。 shとして起動した場合は、このようなことはしない。 norcオプションを使用するとこの動作を抑制でき、--rcfileオプションを使用すると別のファイルを強制的に読み込むことができるが、rshdもsshdも通常、これらのオプションを指定してシェルを起動したり、オプションを指定したりすることはできない。
有効ユーザー(グループ)IDが実ユーザー(グループ)IDに等しくない状態でシェルが起動され、-pオプションが与えられない場合、起動ファイルは読み込まれず、シェル関数は環境から継承されず、SHELLOPTS、BASHOPTS、CDPATH、GLOBIGNORE変数が環境にある場合は無視され、有効ユーザーIDが実ユーザーIDに設定される。 起動時に-pオプションが指定された場合、起動時の動作は同じであるが、実効ユーザーIDはリセットされない。
DEFINITIONS
以下の定義は、本書の残りの部分で使用される。
- blank
- スペースあるいはタブ
- word
- シェルが1つの単位とみなす文字列。 トークンとも呼ばれる。
- name
- 英数字とアンダースコアのみで構成され、英字またはアンダースコアで始まる単語。 識別子とも呼ばれる。
- metacharacter
- 引用符で囲まれていない場合、単語を区切る文字。 以下のいずれか:
| & ; ( ) < > space tab newline
- control operator
- 制御機能を果たすトークン。 以下のシンボルのいずれかである:
|| & && ; ;; ;& ;;& ( ) | |& <newline>
RESERVED WORDS
予約語はシェルにとって特別な意味を持つ語である。 以下の単語は、引用符で囲まれておらず、コマンドの最初の単語(以下の SHELL GRAMMAR を参照)、case または select コマンドの 3 番目の単語(in のみ有効)、for コマンドの 3 番目の単語(in と do のみ有効)のいずれかに指定されている場合に予約語として認識される:
! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]
SHELL GRAMMAR
Simple Commands
単純なコマンドは、空白で区切られた単語とリダイレクションが続き、制御演算子で終了する、オプションの変数代入のシーケンスである。 最初の単語は実行するコマンドを指定し、引数ゼロとして渡される。 残りの単語は、呼び出されたコマンドの引数として渡される。
単純なコマンドの戻り値は、そのコマンドの終了ステータスであり、コマンドがシグナルnで終了する場合は128+nである。
Pipelines
パイプラインは、制御演算子|または|&で区切られた1つまたは複数のコマンドのシーケンスである。 パイプラインの書式は以下の通りである:
[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]
commandの標準出力は、パイプを経由してcommand2の標準入力に接続される。 この接続は、コマンドで指定されたリダイレクション(後述のREDIRECTION を参照)の前に実行される。 もし|&が使われると、commandの標準出力に加えて、commandの標準エラーもパイプを通してcommand2の標準入力に接続される。 この標準エラーから標準出力への暗黙のリダイレクトは、コマンドによって指定されたリダイレクトの後に実行される。
パイプラインの戻りステータスは、pipefailオプションが有効になっていない限り、最後のコマンドの終了ステータスになる。 pipefailが有効な場合、パイプラインの戻りステータスは、0以外のステータスで終了した最後の(右端の)コマンドの値、またはすべてのコマンドが正常に終了した場合は0になる。 パイプラインの前に予約語 ! がある場合、そのパイプラインの終了ステータスは、前述の終了ステータスの論理的否定となる。 シェルは、値を返す前にパイプラインのすべてのコマンドが終了するのを待つ。
時間予約語がパイプラインの前にある場合、パイプラインが終了すると、その実行によって消費されたユーザー時間とシステム時間だけでなく、経過時間も報告される。 pオプションは、出力フォーマットをPOSIXで指定されたものに変更する。 シェルがposixモードの場合、次のトークンが `-' で始まっていると、timeを予約語として認識しない。 TIMEFORMAT変数には、タイミング情報をどのように表示するかを指定する書式文字列を設定することができる。
シェルがposixモードの場合、timeの後に改行が続くことがある。 この場合、シェルはシェルとその子シェルが消費したユーザー時間とシステム時間の合計を表示する。 TIMEFORMAT 変数を使用して、時間情報の書式を指定することができる。
パイプラインの各コマンドは、別々のプロセスとして(つまりサブシェルで)実行される。 サブシェル環境の説明については、COMMAND EXECUTION ENVIRONMENT を参照のこと。 shopt 組み込み関数を使用して lastpipe オプションを有効にすると (後述の shopt の説明を参照)、パイプラインの最後の要素をシェルプロセスで実行することができる。
Lists
リストは、1つ以上のパイプラインを ;, &, &&, || のいずれかの演算子で区切り、オプションで ;, &, <newline> のいずれかで終了させるシーケンスである。
これらのリスト演算子のうち、&&と||は等しい優先順位を持ち、次いで ; と & が等しい優先順位を持つ。
コマンドを区切るセミコロンの代わりに、1つ以上の改行がリスト中に現れることもある。
コマンドが制御演算子&で終了する場合、シェルはサブシェルでバックグラウンドでコマンドを実行する。 シェルはコマンドの終了を待たず、リターン・ステータスは0になる。これらは非同期コマンドと呼ばれる。 で区切られたコマンドは順次実行され、シェルは各コマンドが順番に終了するのを待つ。 リターン・ステータスは、最後に実行されたコマンドの終了ステータスである。
ANDリストとORリストは、それぞれ&&と ||制御演算子で区切られた1つ以上のパイプラインのシーケンスである。 ANDリストとORリストは左連想で実行される。 ANDリストは次のような形式を持つ。
command1 && command2
command2が実行されるのは、command1が0(成功)の終了ステータスを返した場合のみである。
ORリストは次のような形をしている。
command1 || command2
command2が実行されるのは、command1がゼロ以外の終了ステータスを返した場合のみである。 ANDリストとORリストの戻りステータスは、リスト内で最後に実行されたコマンドの終了ステータスである。
Compound Commands
複合コマンドは以下のいずれかである。 ほとんどの場合、コマンドの説明のリストは、コマンドの残りの部分と1つ以上の改行で区切られ、セミコロンの代わりに改行が続くことがある。
- (list)
- リストはサブシェル環境で実行される(後述の「COMMAND EXECUTION ENVIRONMENT 」を参照)。
シェルの環境に影響を与える変数割り当てや組み込みコマンドは、コマンドの完了後には有効にならない。 リターン・ステータスは list の終了ステータスである。
- { list; }
- listは単に現在のシェル環境で実行される。listは改行またはセミコロンで終了しなければならない。 これはグループ・コマンドとして知られている。 戻りステータスは、listの終了ステータスである。 メタキャラクタ (and)とは異なり、{and}は予約語であり、予約語を認識することが許可されている場所に出現しなければならないことに注意すること。 これらは単語の区切りを引き起こさないので、空白または他のシェル・メタキャラクタでlistと区切らなければならない。
- ((expression))
- 式は、後述の「ARITHMETIC EVALUATION」のルールに従って評価される。 式の値が0でない場合、戻り値は0であり、そうでない場合、戻り値は1である。
- [[ expression ]]
- 条件式の評価に応じて 0 または 1 のステータスを返す。 式は、後述の「CONDITIONAL EXPRESSIONS」で説明するプライマリで構成される。
[[ and ]]の間の単語では、単語分割とパス名展開は行われない。 チルダ展開、パラメータ展開、変数展開、算術展開、コマンド置換、プロセス置換、引用符除去は行われる。 -fのような条件演算子は、プライマリとして認識されるためには、引用符で囲まれていな ければならない。
- [[と一緒に使用すると、< and > 演算子は、現在のロケールを使用して辞書順にソートする。
- パラメータの扱い(パラメータの欠落など)については、test組み込みコマンドの説明(後述の「SHELL BUILTIN COMMANDS 」セクション)を参照のこと。
- 演算子 == および != が使用されると、演算子の右側の文字列はパターンとみなされ、 extglob シェル・オプションが有効であるかのように、後述の「パターン・マッチング」の規則に従ってマッチングされる。 nocasematchシェルオプションが有効な場合、アルファベットの大文字小文字を区別せずにマッチングが行われる。
戻り値は、文字列がパターンにマッチする(==)かマッチしない(!=)なら0、そうでなければ1である。 パターンの任意の部分を引用符で囲むと、引用符で囲んだ部分が文字列としてマッチする。
- さらに二項演算子=~が使用でき、優先順位は==や!=と同じである。
- この演算子が使用されると、演算子の右側の文字列は POSIX 拡張正規表現とみなされ、 (regex(3) で通常説明されている POSIX regcomp と regexec インターフェイスを使用して) それに従ってマッチングされる。 返り値は、文字列がパターンにマッチすれば 0、マッチしなければ 1 である。 正規表現が構文的に正しくない場合、条件式の戻り値は2である。
nocasematchシェルオプションが有効な場合、アルファベットの大文字小文字を区別せずにマッチが行われる。 パターンのどの部分も引用符で囲むことができ、引用符で囲んだ部分を文字列としてマッチさせることができる。 正規表現中の括弧表現は注意深く扱わなければならない。 なぜなら、通常のクォート文字は括弧の間で意味を失うからである。 パターンがシェル変数に格納されている場合、変数展開を引用符で囲むと、 パターン全体が文字列としてマッチするようになる。
- パターンは、文字列のどの部分にもマッチする。 正規表現演算子 ^ と $ を使ってパターンにアンカーを付けると、文字列全体にマッチするようになる。 配列変数BASH_REMATCHは、文字列のどの部分がパターンにマッチしたかを記録する。 インデックス0のBASH_REMATCHの要素には、正規表現全体にマッチした文字列の部分が含まれる。 正規表現内の括弧で囲まれた部分式でマッチした文字列は、残りのBASH_REMATCHのインデックスに保存される。インデックスnのBASH_REMATCHの要素は、n番目の括弧付き部分式にマッチする文字列の部分である。
式は以下の演算子を使って結合することができる:
- ( expression )
- 式の値を返す。 これは、演算子の通常の優先順位を上書きするために使われる。
- ! expression
- 式が偽なら真。
- expression1 && expression2
- expression1とexpression2の両方が真なら真。
- expression1 || expression2
- expression1またはexpression2のどちらかが真なら真。
- expression1の値が条件式全体の戻り値を決定するのに十分である場合、&&と||演算子はexpression2を評価しない。
- for name [ [ in [ word ... ] ] ; ] do list ; done
- inに続く単語のリストが展開され、項目のリストが生成される。 変数名はこのリストの各要素に順番に設定され、その都度listが実行される。 inが省略された場合、forコマンドは設定された位置パラメーター(後述のPARAMETERS を参照)ごとにlistを1回実行する。 戻りステータスは、最後に実行されたコマンドの終了ステータスである。 inに続く項目の展開の結果、リストが空になった場合、コマンドは実行されず、リターン・ステータスは0となる。
- for (( expr1 ; expr2 ; expr3 )) ; do list ; done
- まず、算術式 expr1 は、後述の「ARITHMETIC EVALUATION」のルールに従って評価される。
算術式expr2は、ゼロになるまで繰り返し評価される。 expr2がゼロ以外の値に評価されるたびに、listが実行され、算術式expr3が評価される。 いずれかの式が省略された場合、その式は1に評価されるものとして動作する。 戻り値は、実行されたリストの最後のコマンドの終了ステータスであり、いずれかの式が無効な場合は偽である。
- select name [ in word ] ; do list ; done
- inに続く単語のリストが展開され、項目のリストが生成される。 展開された単語のセットは標準エラーに出力される。 inが省略された場合、位置パラメーターが表示される(後述のPARAMETERS を参照)。 次にPS3プロンプトが表示され、標準入力から1行が読み込まれる。 その行が、表示された単語の1つに対応する数字で構成されている場合、nameの値はその単語に設定される。 行が空の場合、単語とプロンプトが再度表示される。 EOFが読み込まれると、コマンドは完了する。 それ以外の値が読み込まれると、nameにはnullが設定される。 読み込まれた行は変数REPLYに保存される。 リストは、breakコマンドが実行されるまで、選択のたびに実行される。 selectの終了ステータスは、リスト内で最後に実行されたコマンドの終了ステータスであり、コマンドが実行されなかった場合は0である。
- case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
- caseコマンドはまず単語を展開し、後述のパターンマッチングで説明されているマッチングルールを使って、順番に各パターンとのマッチングを試みる。 単語は、チルダ展開、パラメータと変数の展開、算術展開、コマンド置換、プロセス置換、引用符除去を使って展開される。 検査される各パターンは、チルダ展開、パラメータ展開、変数展開、算術展開、コマンド置換、プロセス置換を使って展開される。 nocasematchシェル・オプションを有効にすると、アルファベットの大文字と小文字を区別せずにマッチが行われる。 マッチすると、対応するリストが実行される。 演算子;;が使われると、最初のパターンマッチの後、それ以降のマッチは試みられない。 の代わりに;&を使うと、次のパターン・セットに関連するリストが実行される。 の代わりに ;;& を使用すると、シェルは文中に次のパターンリストがあればそれをテストし、マッチした場合に関連するリストを実行する。 パターンにマッチしなければ、終了ステータスは0である。 それ以外の場合は、リスト内で最後に実行されたコマンドの終了ステータスとなる。
- if list; then list; [ elif list; then list; ] ... [ else list; ] fi
- ifリストが実行される。 その終了ステータスがゼロであれば、thenリストが実行される。 そうでなければ、各elifリストが順番に実行され、その終了ステータスがゼロであれば、対応するthenリストが実行され、コマンドは完了する。 そうでない場合、elseリストがあればそれが実行される。 終了ステータスは、最後に実行されたコマンドの終了ステータスであり、どの条件も真をテストしなかった場合はゼロである。
- while list-1; do list-2; done
- until list-1; do list-2; done
- whileコマンドは、リストlist-1の最後のコマンドがゼロの終了ステータスを返す限り、リストlist-2を実行し続ける。 untilコマンドはwhileコマンドと同じであるが、テストが否定される点が異なる: list-1の最後のコマンドが0以外の終了ステータスを返す限り、list-2は実行される。 whileコマンドとuntilコマンドの終了ステータスは、リスト-2で最後に実行されたコマンドの終了ステータスであり、何も実行されなかった場合はゼロである。
Coprocesses
コプロセスは、coproc予約語を先頭に持つシェルコマンドである。 コプロセスは、コマンドを&制御演算子で終了させたかのように、サブシェル内で非同期に実行され、実行中のシェルとコプロセスの間に双方向パイプが確立される。
コプロセスの書式は以下の通りである:
- coproc [NAME] command [redirections]
これはNAMEという名前のコプロセスを作成する。 NAME が与えられない場合、デフォルトの名前は COPROC である。 NAME は、 command が単純コマンド(上記を参照のこと)の場合は与えてはならない。 コプロセスが実行されると、シェルは実行中のシェルのコンテキスト内に NAME という名前の配列変数(後述の「Arrays 」を参照)を作成する。 コマンドの標準出力は、実行シェルのファイル記述子にパイプで接続され、そのファイル記述子がNAME[0]に代入される。 コマンドの標準入力は、実行シェルのファイル記述子にパイプで接続され、そのファイル記述子が NAME[1]に割り当てられる。 このパイプは、コマンドで指定されたリダイレクション(後述のREDIRECTION を参照)の前に確立される。 ファイル記述子は、標準的な単語展開を使って、シェルコマンドやリダイレクションの引数として利用できる。 コマンドとプロセス置換を実行するために作成されたもの以外では、ファイル記述子はサブシェルでは利用できない。 コプロセスを実行するために生成されたシェルのプロセス ID は、変数 NAME_PID の値として利用できる。 wait 組み込みコマンドは、コプロセスの終了を待つために使用できる。
コプロセスは非同期コマンドとして作成されるため、coproc コマンドは常に成功を返す。 コプロセスの戻りステータスは、コマンドの終了ステータスである。
Shell Function Definitions
シェル関数は、単純なコマンドのように呼び出され、新しい位置パラメーターのセットを持つ複合コマンドを実行するオブジェクトである。 シェル関数は以下のように宣言される:
- fname () compound-command [redirection]
- function fname [()] compound-command [redirection]
- これはfnameという名前の関数を定義する。 予約語のfunctionは省略可能である。 関数の予約語を指定した場合、括弧は省略可能である。 関数の本体は複合コマンドcompound-commandである(上記のCompound Commands を参照のこと)。 このコマンドは通常{と}の間のコマンドのリストであるが、1つの例外を除いて、上記の「複合コマンド」にリストされているコマンドであれば何でもよい: compound-commandは、fnameが単純コマンドの名前として指定されると、必ず実行される。 posixモードでは、fnameは有効なシェル名でなければならず、POSIX特殊組み込み関数の名前であってはならない。 デフォルトモードでは、関数名は$を含まない引用符で囲まれていないシェル語であれば何でもよい。 関数定義時に指定されたリダイレクション(後述のREDIRECTION を参照)は、関数実行時に実行される。 構文エラーが発生するか、同じ名前の読み取り専用関数が既に存在しない限り、関数定義の終了ステータスは0である。 実行されると、関数の終了ステータスは、ボディ内で最後に実行されたコマンドの終了ステータスになる。 (後述のFUNCTIONS を参照のこと)。
COMMENTS
非対話型シェル、または shopt 組み込みコマンドの interactive_comments オプションが有効になっている対話型シェル(後述の「SHELL BUILTIN COMMANDS 」を参照)では、# で始まる単語は、その単語とその行の残りのすべての文字を無視する。 interactive_comments オプションを有効にしていない対話型シェルでは、コメントは許可されない。 対話型シェルでは、interactive_commentsオプションはデフォルトでオンになっている。
QUOTING
クオートは、シェルに対して特定の文字や単語の特別な意味を取り除くために使用される。 引用符で囲むことで、特殊文字に対する特別な扱いを無効にしたり、予約語をそのようなものとして認識させないようにしたり、パラメータの展開を防止したりすることができる。
上記のDEFINITIONSに列挙されているメタキャラクタは、シェルにとって特別な意味を持ち、それ自身を表す場合にはクォートしなければならない。
コマンドのヒストリ展開機能を使用する場合(下記の「HISTORY EXPANSION 」を参照)、ヒストリ展開を防ぐために、ヒストリ展開文字(通常は「!」)を引用符で囲む必要がある。
エスケープ文字、一重引用符、二重引用符である。
引用符で囲まないバックスラッシュ( \ )はエスケープ文字である。 これは、<改行>を除き、次に続く文字のリテラル値を保持する。 <newline>のペアが現れ、バックスラッシュ自体が引用符で囲まれていない場合、その<newline>は行の続きとして扱われる(つまり、入力ストリームから取り除かれ、事実上無視される)。
文字を一重引用符で囲むと、引用符内の各文字のリテラル値が保持される。 バックスラッシュが先行する場合でも、一重引用符の間に一重引用符を置くことはできない。
二重引用符で文字を囲むと、引用符内のすべての文字のリテラル値が保持されるが、$、`、 \、およびヒストリ展開が有効な場合は! シェルがposixモードの場合、! はヒストリ展開が有効になっていても、二重引用符の中では特別な意味を持たない。 文字$と`は、二重引用符内でも特別な意味を持つ。 バックスラッシュは、$、`、", \、<改行> のいずれかの文字が続く場合のみ特別な意味を持つ。 二重引用符の前にバックスラッシュを付けると、二重引用符の中で引用符を付けることができる。 有効にすると、二重引用符の中に現れた ! がバックスラッシュでエスケープされない限り、履歴展開が実行される。 の前のバックスラッシュは削除されない。
特別なパラメータである*と@は、二重引用符で囲むと特別な意味を持つ(下記のPARAMETERS を参照)。
$'string'という形式の単語は特別に扱われる。 この単語は文字列に展開され、バックスラッシュでエスケープされた文字が ANSI C標準の指定に従って置き換えられる。 バックスラッシュ・エスケープ・シーケンスが存在する場合は、以下のようにデコードされる:
- \a alert (bell)
- \b backspace
- \e
- \E an escape character
- \f form feed
- \n new line
- \r carriage return
- \t horizontal tab
- \v vertical tab
- \\ backslash
- \' single quote
- \" double quote
- \? question mark
- \nnn 8ビットの文字で、その値は8進数nnn(1桁から3桁の8進数)である。
- \xHH 値が16進数HH(1桁または2桁の16進数)である8ビット文字
- \uHHHH Unicode(ISO/IEC 10646)文字で、その値は16進数値HHHHである。 (1桁から4桁の16進数)
- \UHHHHHHHH
- ユニコード(ISO/IEC 10646)文字で、その値は16進数値HHHHHHHHHHである。 (1桁から8桁の16進数)
- \cx a control-x character
展開された結果は、ドル記号がなかったかのように、単一引用符でくくられる。
二重引用符で囲まれた文字列の前にドル記号 ($"string") を置くと、その文字列は現在のロケールに従って翻訳される。 gettextインフラストラクチャは、LC_MESSAGESとTEXTDOMAINシェル変数を使用して、メッセージカタログの検索と翻訳を実行する。 現在のロケールがCまたはPOSIXの場合、または利用可能な翻訳がない場合、ドル記号は無視される。 文字列が翻訳され置換される場合、置換は二重引用符で囲まれる。
PARAMETERS
パラメータは値を格納するエンティティである。 名前、数字、または以下の「特別なパラメータ」に列挙されている特別な文字のいずれかになる。 変数は、名前で示されるパラメータである。変数は値と0個以上の属性を持つ。 属性は、declare組み込みコマンドを使用して割り当てられる(後述の「SHELL BUILTIN COMMANDS 」のdeclareを参照)。
パラメータには値が設定される。 NULL文字列は有効な値である。 一度設定された変数は、unset 組み込みコマンド(後述の SHELL BUILTIN COMMANDS を参照)を使用することによってのみ設定解除することができる。
変数は、次のようなステートメントで代入することができる。
name=[value]
valueが与えられない場合、変数にはヌル文字列が代入される。 すべての値は、チルダ展開、パラメータ展開、変数展開、コマンド置換、算術展開、引用符除去を受ける(下記のEXPANSION を参照)。 変数に整数属性が設定されている場合、$((...))展開が使用されなくても、値は算術式として評価される(下記の算術式展開を参照)。 単語の分割は、後述の「特殊パラメータ」で説明する"$@"を除いて行われない。 パス名展開は行われない。 代入文は、alias、declare、typeset、export、readonly、local組み込みコマンド(宣言コマンド)の引数としても使用できる。 posix モードの場合、これらの組み込み関数は、コマンド組み込み関数の 1 つまたは複数のインスタンスの後にコマンド内に出現し、これらの代入文のプロパティを保持することができる。
代入文がシェル変数または配列インデックスに値を代入する場合、+= 演算子を使用して変数の前の値に追加または加算することができる。 これには、代入文を受け付けるdeclareなどの組み込みコマンド(宣言コマンド)の引数も含まれる。 整数属性が設定されている変数に+=を適用すると、値は算術式として評価され、変数の現在値に加算される。 複合代入を使用して配列変数に+=を適用すると(後述の「配列」を参照)、変数の値は(=を使用したときのように)設定解除されず、新しい値が配列の最大添字(添字付き配列の場合)より1つ大きい添字から始まる配列に追加されるか、連想配列のキーと値のペアとして追加される。 文字列値の変数に適用すると、valueが展開され、変数の値に追加される。
declareまたはlocal組み込みコマンド(以下のdeclareとlocalの説明を参照)の-nオプションを使って変数にnameref属性を割り当てると、nameref、つまり別の変数への参照を作成することができる。 これにより、変数を間接的に操作することができる。 nameref変数の参照、代入、解除、属性の変更(nameref属性そのものの使用や変更を除く)は常に、nameref変数の値で指定された変数に対して実行される。 namerefはシェル関数の中で、関数の引数として渡される変数名を参照するためによく使われる。 例えば、シェル関数の最初の引数として変数名が渡された場合、関数内で declare -n ref=$1 を実行すると、最初の引数として渡された変数名を値とする nameref 変数 ref が作成される。 refへの参照や代入、属性の変更は、$1として渡された変数名への参照や代入、属性の変更として扱われる。 forループの制御変数がnameref属性を持つ場合、単語のリストはシェル変数のリストとすることができ、ループが実行されると、リスト内の各単語に対して順番に名前参照が確立される。 配列変数にnameref属性を与えることはできない。 しかし、nameref 変数は配列変数や添え字付き配列変数を参照できる。 nameref は、unset 組み込み関数の -n オプションを使ってアンセットできる。 そうでない場合、nameref 変数の名前を引数として unset を実行すると、 nameref 変数によって参照される変数がアンセットされる。
Positional Parameters
位置パラメーターは、1桁の0以外の1桁以上の数字で示されるパラメーターである。 位置パラメーターは、シェルが起動されたときに、シェルの引数から代入される。 位置パラメーターは、代入文では代入できない。 位置パラメーターは、シェル関数が実行されるときに一時的に置き換えられる(後述の FUNCTIONS を参照)。
1桁以上で構成される位置パラメーターを展開する場合は、中括弧で囲む必要がある(後述のEXPANSION を参照)。
Special Parameters
シェルはいくつかのパラメータを特別に扱う。 これらのパラメータは参照のみ可能で、代入はできない。
- 1 から始まる位置パラメーターに展開する。 展開が二重引用符で囲まれていない場合、各位置パラメーターは別々の単語に展開される。 それが実行されるコンテキストでは、それらの単語はさらに単語分割とパス名展開の対象となる。展開が二重引用符で囲まれている場合は、各パラメータの値がIFS特殊変数の最初の文字で区切られた1つの単語に展開される。 つまり、"$*"は"$1c$2c... "と等価であり、cはIFS変数の値の最初の文字である。 IFSが未設定の場合、パラメータは空白で区切られる。 IFSがNULLの場合、パラメータは区切り文字なしで結合される。
- @
- 1 から始まる位置パラメーターに展開される。 単語分割が行われるコンテキストでは、各位置パラメーターを別々の単語に展開する。 単語分割が行われないコンテキストでは、各位置パラメーターをスペースで区切った 単語に展開する。 展開が二重引用符で囲まれている場合、各パラメーターは別々の単語に展開される。 つまり、"$@"は"$1" "$2"...と等価である。 二重引用符による展開が単語内で起こる場合、最初のパラメータの展開は元の単語の先頭部分と結合され、最後のパラメータの展開は元の単語の最後の部分と結合される。 位置パラメーターがない場合、"$@"と"$@"は何も展開されない(つまり削除される)。
- 位置パラメーターの数を10進数で表す。
- ?
- 最後に実行されたフォアグラウンド・パイプラインの終了ステータスに展開される。
- -
- set 組み込みコマンド、またはシェル自身が設定したオプションフラグ(-i オプションなど)に展開される。
- $
- シェルのプロセス ID に展開する。 () サブシェルでは、サブシェルではなく現在のシェルのプロセス ID に展開される。
- !
- 非同期コマンドとして実行されたか、bg組み込み関数(以下のJOB制御を参照)を使用して実行されたかにかかわらず、直近にバックグラウンドに配置されたジョブのプロセスIDに展開される。
- 0
- シェルまたはシェルスクリプトの名前に展開される。 これはシェル初期化時に設定される。コマンドファイルを指定してbashを起動すると、$0にそのファイル名が設定される。 bashが-cオプション付きで起動された場合、$0は、実行する文字列があれば、その文字列の後の最初の引数に設定される。 そうでない場合は、引数0で指定された、bashの起動に使用されたファイル名が設定される。
Shell Variables
以下の変数はシェルによって設定される:
- _
- シェル起動時に、環境または引数リストで渡された、実行中のシェルまたはシェルスクリプトを呼び出すために使用されるパス名に設定される。 その後、フォアグラウンドで実行される直前の単純なコマンドの lastargument に展開される。 Alsosetは、実行される各コマンドの起動に使われるフルパス名に設定され、 そのコマンドにエクスポートされる環境に置かれる。 メールをチェックする場合、このパラメーターは現在チェックされているメールファイルの名前を保持する。
- BASH
- このbashのインスタンスを起動するのに使われた完全なファイル名に展開される。
- BASHOPTS
- 有効なシェルオプションのコロン区切りリスト。 リストの各単語は、shopt 組み込みコマンドの -s オプションの有効な引数である (下記の SHELL BUILTIN COMMANDS を参照のこと)。BASHOPTSに表示されるオプションは、shoptが有効であると報告したものである。 bashの起動時にこの変数が環境にあると、起動ファイルを読み込む前にリストの各シェルオプションが有効になる。 この変数は読み取り専用である。
- BASHPID
- 現在のbashプロセスのプロセスIDに展開する。 これは、bashの再初期化を必要としないサブシェルなど、特定の状況下では$$とは異なる。 BASHPIDへの代入は影響しない。 BASHPIDが未設定の場合、その後にリセットされても、特別なプロパティは失われる。
- BASH_ALIASES
- エイリアス組み込み関数が保持するエイリアスの内部リストに対応する連想配列変数。 この配列に追加された要素はエイリアスリストに表示されるが、 現在のところ、配列の要素を設定解除してもエイリアスはエイリアスリストから 削除されない。 BASH_ALIASESがアンセットされると、その後リセットされてもその特別なプロパティは失われる。
- BASH_ARGC
- 現在のbash実行コールスタックの各フレームのパラメータ数を値とする配列変数。 現在のサブルーチン(.またはsourceで実行されるシェル関数またはスクリプト)のパラメータ数は、スタックの一番上にある。 サブルーチンが実行されると、渡されたパラメータの数がBASH_ARGCにプッシュされる。 シェルがBASH_ARGCを設定するのは、拡張デバッグモードのときだけである(以下のshoptビルトインのextdebugオプションの説明を参照)。 シェルがスクリプトの実行を開始した後にextdebugを設定したり、extdebugが設定されていないときにこの変数を参照したりすると、値に矛盾が生じる可能性がある。
- BASH_ARGV
- 現在のbash実行呼び出しスタックのすべてのパラメータを含む配列変数。 最後のサブルーチン呼び出しの最後のパラメータがスタックの一番上にあり、最初の呼び出しの最初のパラメータが一番下にある。 サブルーチンが実行されると、与えられたパラメータがBASH_ARGVにプッシュされる。 シェルがBASH_ARGVを設定するのは、拡張デバッグモードのときだけである(下記のshopt組み込み関数へのextdebugオプションの説明を参照のこと)。 シェルがスクリプトの実行を開始した後にextdebugを設定したり、extdebugが設定されていないときにこの変数を参照したりすると、値に矛盾が生じる可能性がある。
- BASH_ARGV0
- 参照されると、この変数はシェルまたはシェルスクリプトの名前に展開される($0と同じ。上記の特別なパラメータ0の説明を参照)。 BASH_ARGV0に代入すると、代入された値は$0にも代入される。 BASH_ARGV0が設定されていない場合、その後にリセットされても、特別な性質は失われる。
- BASH_CMDS
- ハッシュ組み込み関数が保持するコマンドの内部ハッシュテーブルに対応するメンバを持つ連想配列変数。 この配列に追加された要素はハッシュテーブルに表示されるが、現在のところ、配列要素の設定を解除してもハッシュテーブルからコマンド名が削除されることはない。 BASH_CMDSがアンセットされると、その後リセットされても、その特別な特性は失われる。
- BASH_COMMAND
- シェルがトラップの結果としてコマンドを実行している場合を除き、現在実行中または実行しようとしているコマンドである。 BASH_COMMANDが設定されていない場合、その後にリセットされても、特別なプロパティは失われる。
- BASH_EXECUTION_STRING
- -c起動オプションのコマンド引数。
- BASH_LINENO
- FUNCNAMEの各メンバが呼び出されたソースファイルの行番号をメンバとする配列変数。 ${BASH_LINENO[$i]}は${FUNCNAME[$i]}が呼び出されたソースファイルの行番号(${BASH_SOURCE[$i+1]})である(他のシェル関数内で参照された場合は${BASH_LINENO[$i-1]})。 現在の行番号を得るにはLINENOを使う。
- BASH_LOADABLES_PATH
- enableコマンドで指定された動的にロード可能なビルトインをシェルが探すディレクトリのコロン区切りのリスト。
- BASH_REMATCH
- 二項演算子=~によって[[ 条件コマンドにメンバが代入される配列変数。 インデックス0の要素は、正規表現全体にマッチする文字列の部分である。 インデックスnの要素は、n番目の括弧で囲まれた部分式にマッチする文字列の部分である。
- BASH_SOURCE
- 配列変数FUNCNAMEの対応するシェル関数名が定義されているソースファイル名をメンバとする配列変数である。 シェル関数${FUNCNAME[$i]}はファイル${BASH_SOURCE[$i]}で定義され、${BASH_SOURCE[$i+1]}から呼び出される。
- BASH_SUBSHELL
- シェルがその環境で実行を開始すると、各サブシェルまたはサブシェル環境内で1ずつ増加する。 初期値は0である。BASH_SUBSHELLが設定されていない場合、その後にリセットされても、特別なプロパティは失われる。
- BASH_VERSINFO
- 読み取り専用の配列変数で、bashのバージョン情報を保持する。 配列のメンバに割り当てられる値は以下のとおりである:
- BASH_VERSINFO[0]
- The major version number (the release).
- BASH_VERSINFO[1]
- The minor version number (the version).
- BASH_VERSINFO[2]
- The patch level.
- BASH_VERSINFO[3]
- The build version.
- BASH_VERSINFO[4]
- The release status (e.g., beta1).
- BASH_VERSINFO[5]
- The value of MACHTYPE.
- BASH_VERSION
- bashのインスタンスのバージョンを表す文字列に展開される。
- COMP_CWORD
- 現在のカーソル位置を含む単語の${COMP_WORDS}へのインデックス。 この変数は、プログラマブル補完機能によって呼び出されるシェル関数でのみ使用可能である(下記のProgrammable Completion を参照のこと)。
- COMP_KEY
- 現在の補完機能を呼び出すために使用されるキー(またはキーシーケンスの最後のキー)。
- COMP_LINE
- 現在のコマンドライン。 この変数は、シェル関数とプログラム可能な補完機能によって呼び出される外部コマンドでのみ利用可能である(後述のProgrammable Completion を参照)。
- COMP_POINT
- 現在のコマンドの先頭からの相対的な現在のカーソル位置のインデックス。現在のカーソル位置が現在のコマンドの終端にある場合、この変数の値は ${#COMP_LINE}に等しい。 この変数は、シェル関数と、プログラム可能な補完機能によって呼び出される外部コマンドでのみ利用可能である(後述のProgrammable Completion を参照のこと)。
- COMP_TYPE
- 補完関数が呼ばれる原因となった補完のタイプに対応する整数値を設定する: TABは通常の補完、? は連続したタブの後の補完のリスト、! は部分的な単語補完の選択肢のリスト、@ は単語が未修正の場合の補完のリスト、% はメニュー補完のリストである。 この変数は、シェル関数とプログラム可能な補完機能によって呼び出される外部コマンドでのみ使用できる(後述のProgrammable Completion を参照)。
- COMP_WORDBREAKS
- readlineライブラリが単語補完を行う際に単語区切り文字として扱う文字の集合。 COMP_WORDBREAKSが未設定の場合、その後リセットされても、その特別な特性は失われる。
- COMP_WORDS
- 現在のコマンドラインの各単語からなる配列変数(下記の配列を参照)。 行は、前述のCOMP_WORD-BREAKSを使用して、readlineが分割するように単語に分割される。 この変数は、プログラム可能な補完機能によって呼び出されるシェル関数でのみ使用可能である(後述のProgrammable Completion を参照)。
- COPROC
- 無名コプロセス(上記の「コプロセス」を参照)からの出力と無名コプロセスへの入力のファイル記述子を保持するために作成される配列変数(下記のCoprocesses を参照)。
- DIRSTACK
- ディレクトリスタックの現在の内容を格納する配列変数 (下記の「配列」を参照)。 ディレクトリは、dirs 組み込み関数によって表示された順序でスタックに格納される。 この配列変数のメンバに代入することで、スタックに既にあるディレクトリを変更することができるが、ディレクトリの追加と削除には、pushd 組み込み関数と popd 組み込み関数を使用しなければならない。 この変数への代入は、カレント・ディレクトリを変更しない。 DIRSTACK がアンセットされると、その後にリセットされても、その特別な特性は失われる。
- EPOCHREALTIME
- このパラメータが参照されるたびに、Unixエポック(time(3)を参照)からの秒数がマイクロ秒単位の浮動小数点値として展開される。 EPOCHREALTIMEへの代入は無視される。 EPOCHREALTIMEが設定されていない場合、その後にリセットされても、その特別な特性は失われる。
- EPOCHSECONDS
- このパラメータが参照されるたびに、Unix エポック (time(3) 参照) からの秒数に展開される。 EPOCHSECONDS への代入は無視される。 EPOCHSECONDSが設定されていない場合、その後にリセットされても、その特別な特性は失われる。
- EUID
- シェル起動時に初期化される、現在のユーザーの実効ユーザーIDに展開される。 この変数は読み取り専用である。
- FUNCNAME
- 現在実行コールスタックにあるすべてのシェル関数の名前を含む配列変数。 インデックス0の要素は、現在実行中のシェル関数の名前である。 一番下の要素(インデックスが一番大きい要素)は "main"である。 この変数は、シェル関数が実行されているときだけ存在する。 FUNCNAMEに代入しても何の効果もない。FUNCNAMEが設定されていない場合、その後にリセットされても、特別な特性は失われる。
- この変数はBASH_LINENOとBASH_SOURCEと一緒に使うことができる。 FUNCNAMEの各要素はBASH_LINENOとBASH_SOURCEに対応する要素を持ち、コールスタックを記述する。 例えば、${FUNCNAME[$i]}はファイル${BASH_SOURCE[$i+1]}から行番号${BASH_LINENO[$i]}で呼び出された。 呼び出し元ビルトインは、この情報を使用して現在の呼び出しスタックを表示する。
- GROUPS
- 現在のユーザーがメンバーであるグループのリストを含む配列変数。GROUPSへの代入は無効である。 GROUPSが設定されていない場合、その後にリセットされても、特別なプロパティは失われる。
- HISTCMD
- 現在のコマンドの履歴番号、または履歴リストのインデックス。 HISTCMDへの割り当ては無視される。 HISTCMDが設定されていない場合、その後にリセットされても、特別なプロパティは失われる。
- HOSTNAME
- 自動的に現在のホスト名に設定される。
- HOSTTYPE
- bashが実行されているマシンの種類を一意に表す文字列が自動的に設定される。 デフォルトはシステム依存である。
- LINENO
- このパラメータが参照されるたびに、シェルはスクリプトまたは関数内の 現在の連続行番号(1から始まる)を表す10進数を代入する。スクリプトや関数の中にない場合、代入される値が意味を持つことは保証されない。 LINENOが未設定の場合、その後にリセットされても、その特別な特性は失われる。
- MACHTYPE
- bashが実行されているシステムの種類を、標準のGNU cpu-company-system形式で完全に表す文字列が自動的に設定される。 デフォルトはシステム依存である。
- MAPFILE
- 変数名が与えられていない場合に、mapfile 組み込み関数が読み込んだテキストを保持するために作成される配列変数(下記のArrays を参照)。
- OLDPWD
- cdコマンドで設定された以前の作業ディレクトリ。
- OPTARG
- getopts組み込みコマンドで処理された最後のオプション引数の値(後述のSHELL BUILTIN COMMANDS を参照)。
- OPTIND
- getopts組み込みコマンド(下記のSHELL BUILTIN COMMANDS を参照)が処理する次の引数のインデックス。
- OSTYPE
- bashが実行されているオペレーティング・システムを表す文字列が自動的に設定される。 デフォルトはシステム依存である。
- PIPESTATUS
- 最も最近実行されたフォアグラウンド・パイプラインのプロセス(単一のコマンドのみを含むことができる)の終了ステータス値のリストを含む配列変数(以下のArrays を参照)。
- PPID
- シェルの親のプロセスID。 この変数は読み取り専用である。
- PWD
- cdコマンドで設定された現在の作業ディレクトリ。
- RANDOM
- このパラメータが参照されるたびに、0から32767の間のランダムな整数に展開される。 RANDOMに値を代入すると、乱数列が初期化(seeds)される。RANDOMの設定が解除されると、その後リセットされても、その特別な特性は失われる。
- READLINE_LINE
- READLINE_MARK
- bind -x」(後述のSHELL BUILTIN COMMANDS 参照)で使用する、readline行バッファ内のマーク(保存された挿入点)の位置。 挿入点とマークの間の文字は、しばしば領域と呼ばれる。
- READLINE_POINT
- bind -x(下記のSHELL BUILTIN COMMANDS を参照)で使用する。
- REPLY
- 引数が与えられない場合、read 組み込みコマンドによって読み込まれた入力行を設定する。
- SECONDS
- このパラメータが参照されるたびに、シェル起動からの秒数が返される。 SECONDSに値が代入されている場合、それ以降の参照時に返される値は、代入後の秒数に代入された値を加えたものとなる。 シェル起動時の秒数と現在時刻は、常にシステムクロックに問い合わせて決定される。 SECONDSが未設定の場合、その後にリセットされても、その特別な特性は失われる。
- SHELLOPTS
- 有効なシェルオプションのコロン区切りのリスト。 リスト内の各単語は、 set 組み込みコマンドの -o オプションの有効な引数である (後述の SHELL BUILTIN COMMANDS を参照のこと)。 SHELLOPTS に表示されるオプションは、 set -o で有効であると報告されたものである。 bashの起動時にこの変数が環境にある場合、起動ファイルを読み込む前にリストの各シェルオプションが有効になる。 この変数は読み取り専用である。
- SHLVL
- bashのインスタンスが起動するたびに1ずつ増加する。
- SRANDOM
- この変数は、参照されるたびに32ビットの擬似乱数に展開される。/dev/urandomまたはarc4randomをサポートするシステムでは、乱数生成器は線形ではないため、返される各数値はその前の数値と何の関係も持たない。 乱数生成器はシードできないので、この変数への代入は何の効果もない。 SRANDOMが設定されていない場合、その後リセットされても、その特別な特性は失われる。
- UID
- シェル起動時に初期化される現在のユーザーのユーザーIDに展開される。 この変数は読み取り専用である。
以下の変数はシェルで使用される。 bashは変数にデフォルト値を割り当てる場合がある。
- BASH_COMPAT
- この値は、シェルの互換性レベルを設定するために使用される。 様々な互換性レベルとその効果については、後述の SHELL COMPATIBILITY MODE を参照のこと。 値は、希望する互換性レベルに対応する10進数(例えば4.2)または整数(例えば42)である。 BASH_COMPATが未設定または空文字列に設定されている場合、互換性レベルは現在のバージョンのデフォルトに設定される。 BASH_COMPATに有効な互換性レベル以外の値が設定された場合、シェルはエラーメッセージを表示し、互換性レベルを現在のバージョンのデフォルトに設定する。 有効な値は、BSHELLCOMPATIBILITYMODEで後述する互換性レベルに対応する。 例えば、4.2と42はcompat42 shoptオプションに対応する有効な値であり、互換性レベルを42に設定する。 現在のバージョンも有効な値である。
- BASH_ENV
- bashがシェルスクリプトを実行しているときにこのパラメータが設定されると、その値は~/.bashrcのようにシェルを初期化するコマンドを含むファイル名として解釈される。 BASH_ENVの値は、ファイル名として解釈される前に、パラメータ展開、コマンド置換、算術展開が行われる。 PATHは結果のファイル名の検索には使われない。
- BASH_XTRACEFD
- 有効なファイル記述子に対応する整数に設定された場合、 bash は set -x が有効なときに生成されたトレース出力をそのファイル記述子に書き込む。 BASH_XTRACEFDの設定が解除されるか、新しい値が割り当てられると、ファイル記述子は閉じられる。 BASH_XTRACEFD の設定を解除するか、空文字列を代入すると、トレース出力は標準エラーに送られる。BASH_XTRACEFDを2(標準エラーファイルディスクリプター)に設定し、それを解除すると標準エラーは閉じられることに注意すること。
- CDPATH
- cdコマンドの検索パス。 コロンで区切られたディレクトリのリストで、シェルがcdコマンドで指定されたディレクトリを検索する。 サンプル値は ".:~:/usr" である。
- CHILD_MAX
- シェルが記憶しておく、終了した子プロセスのステータス値の数を設定する。 Bashはこの値をPOSIXで定められた最小値以下にすることを許さず、最大値(現在は8192)を超えてはならない。 最小値はシステムに依存する。
- COLUMNS
- 選択リストを印刷するときに端末の幅を決定するために select 複合コマンドで使用される。 checkwinsize オプションが有効になっているか、対話型シェルで SIGWINCH を受け取ったときに自動的に設定される。
- COMPREPLY
- プログラム可能な補完機能 (下記のProgrammable Completion を参照) によって呼び出されたシェル関数が生成する可能性のある補完を bash が読み込む配列変数。 配列の各要素には completion.
- EMACS
- シェルが "t"という値で開始したときに、bashがこの変数を環境内で見つけた場合、シェルはEmacsシェル・バッファで実行されているとみなし、行の編集を無効にする。
- ENV
- posix モードで対話型シェルが起動されると、BASH_ENV(上記の INVOCATION を参照)と同様に展開され実行される。
- EXECIGNORE
- PATHを使ったコマンド検索で無視されるファイル名のリストを定義する、コロンで区切られたシェルパターンのリスト(Pattern Matching を参照)。 これらのパターンのいずれかにフルパス名が一致するファイルは、PATH検索による補完とコマンド実行の目的上、実行可能ファイルとはみなされない。 これは、[]、test、[[ コマンドの動作には影響しない。 コマンドハッシュテーブルのフルパス名は、EXECIGNOREの対象ではない。 実行可能ビットが設定されているが実行可能ファイルではない共有ライブラリファイルを無視するには、この変数を使用する。 パターン・マッチは extglob シェル・オプションの設定に従う。
- FCEDIT
- fc組み込みコマンドのデフォルトエディタ。
- FIGNORE
- ファイル名の補完を行うときに無視する接尾辞のコロン区切りのリスト (下記の READLINE を参照)。 接尾辞がFIGNOREのエントリーにマッチするファイル名は、マッチする ファイル名のリストから除外される。 サンプル値は".o:~"である(この変数に値を代入するときは引用符で囲む必要がある。)
- FUNCNEST
- 0より大きい数値に設定された場合、関数の最大入れ子レベルを定義する。 このネスティング・レベルを超える関数の呼び出しは、現在のコマンドを中断させる。
- GLOBIGNORE
- パス名展開で無視するファイル名の集合を定義するパターンのコロン区切りのリスト。 パス名展開パターンにマッチしたファイル名が、GLOBIGNORE のパターンの1つにもマッチした場合、そのファイル名はマッチリストから取り除かれる。
- HISTCONTROL
- コロンで区切られた値のリストで、コマンドの履歴リストへの保存方法を制御する。値のリストに ignorespace が含まれていると、スペース文字で始まる行は履歴リストに保存されない。 ignoreupsを指定すると、直前の履歴エントリと一致する行は保存されない。 ignorebothはignorespaceとignoreupsの省略形である。 erasedupsを指定すると、現在の行と一致する前の行はすべて、その行が保存される前に履歴リストから削除される。 上記のリストにない値は無視される。 HISTCONTROLが設定されていないか、有効な値が含まれていない場合、シェル・パーサが読み込んだすべての行が、HISTIGNOREの値に従って、履歴リストに保存される。 複数行の複合コマンドの2行目以降はテストされず、HISTCONTROLの値に関係なく履歴に追加される。
- HISTFILE
- コマンド履歴を保存するファイル名(後述のHISTORY を参照)。 デフォルト値は ~/.bash_history である。 未設定の場合、シェルの終了時にコマンド履歴は保存されない。
- HISTFILESIZE
- 履歴ファイルに含まれる最大行数。 この変数に値が代入されると、ヒストリファイルは必要に応じて、最も古いエントリを削除することによって、その行数以下に切り詰められる。 また、シェル終了時にヒストリファイルを書き込んだ後、このサイズに切り詰められる。 値が0の場合、履歴ファイルのサイズは0に切り詰められる。 数値以外の値や0未満の数値は切り捨てられない。 シェルは起動ファイルを読み込んだ後、デフォルト値を HISTSIZE の値に設定する。
- HISTIGNORE
- コロンで区切られたパターンのリストで、履歴リストに保存するコマンド行を決定するために使われる。 各パターンは行頭にアンカーされ、完全な行にマッチしなければならない (暗黙の `*' は付加されない)。 各パターンはHISTCONTROLで指定されたチェックが適用された後、その行に対してテストされる。 通常のシェルパターンにマッチする文字に加えて、`&'は前のヒストリ行にマッチする。 バックスラッシュはマッチを試みる前に取り除かれる。 複数行の複合コマンドの2行目以降はテストされず、 HISTIGNOREの値に関係なくヒストリに追加される。 パターン・マッチは extglob シェル・オプションの設定に従う。
- HISTSIZE
- コマンド履歴(下記のHISTORY を参照)に記憶させるコマンドの数。 値が0の場合、コマンドは履歴リストに保存されない。 0 未満の数値を指定すると、すべてのコマンドが履歴リストに保存される (上限はない)。 シェルは起動ファイルを読み込んだ後、デフォルト値を500に設定する。
- HISTTIMEFORMAT
この変数が設定され、かつ NULL でない場合、その値は strftime(3) の書式文字列として使用され、history 組み込み関数が表示する各履歴エントリに関連付けられたタイムスタンプを表示する。 この変数が設定されている場合、タイムスタンプは履歴ファイルに書き込まれ、シェルセッションを越えて保存される。 タイムスタンプを他のヒストリ行と区別するために、ヒストリのコメント文字を使用する。
- HOME
- cd組み込みコマンドのデフォルト引数である。この変数の値は、チルダ展開を行うときにも使われる。
- HOSTFILE
- シェルがホスト名を補完する必要があるときに読み込む、/etc/hostsと同じ形式のファイルの名前を含む。 値が変更された後に次にホスト名の補完が試みられると、 bashは新しいファイルの内容を既存のリストに追加する。 HOSTFILEが設定されているが値がないか、読み取り可能なファイル名がない場合、bashは/etc/hostsを読み込んでホスト名補完の可能性のあるリストを取得しようとする。 HOSTFILEが設定されていない場合、ホスト名リストはクリアされる。
- IFS
- 内部フィールド区切り文字で、展開後の単語分割や、read組み込みコマンドで行を単語に分割する際に使われる。 デフォルト値は ``<space><tab><new-line>'' である。
- IGNOREEOF
- 唯一の入力としてEOF文字を受け取ったときの対話型シェルの動作を制御する。 設定されている場合、値は、bashが終了する前に入力行の最初の文字として入力されなければならない連続したEOF文字の数である。 この変数が存在するが数値がない場合、または値がない場合、デフォルト値は10である。 存在しない場合、EOFはシェルへの入力の終了を意味する。
- INPUTRC
- readline起動ファイルのファイル名。デフォルトの~/.inputrcを上書きする(後述のREADLINE を参照)。
- INSIDE_EMACS
- シェルの起動時にこの変数が環境に現れると、bashはEmacsシェル・バッファ内で動作しているとみなし、TERMの値によっては行の編集を無効にすることができる。
- LANG
- LC_で始まる変数で特に選択されていないカテゴリーについて、ロケール・カテゴリーを決定するために使用される。
- LC_ALL
- この変数は、LANGおよびロケールカテゴリーを指定する他のLC_変数の値を上書きする。
- LC_COLLATE
- この変数は、パス名展開の結果をソートするときに使用される照合順序を決定し、パス名展開とパターンマッチにおける範囲式、等価クラス、照合順序の動作を決定する。
- LC_CTYPE
- この変数は、パス名展開とパターンマッチにおける文字の解釈と文字クラスの動作を決定する。
- LC_MESSAGES
- この変数は、$で始まる二重引用符で囲まれた文字列の翻訳に使われるロケールを決定する。
- LC_NUMERIC
- この変数は、数値の書式設定に使われるロケールカテゴリーを決定する。
- LC_TIME
- この変数は、データと時刻のフォーマットに使用されるロケールカテゴリーを決定する。
- LINES
- select 複合コマンドで使用され、選択リストを印刷する際の列の長さを決定する。 checkwinsize オプションが有効になっているか、対話型シェルで SIGWINCH を受け取ったときに自動的に設定される。
- このパラメータにファイル名またはディレクトリ名が設定され、MAILPATH変数が設定されていない場合、bashは指定されたファイルまたはMaildir形式のディレクトリにメールが到着したことをユーザーに通知する。
- MAILCHECK
- bashがメールをチェックする頻度(秒)を指定する。 デフォルトは60秒である。 メールをチェックする時間になると、シェルはプライマリ・プロンプトを表示する前にチェックする。 この変数が設定されていないか、0以上の値でない場合、シェルはメールチェックを無効にする。
- MAILPATH
- コロンで区切られた、メールをチェックするファイル名のリスト。 特定のファイルにメールが到着したときに表示されるメッセージは、 ファイル名とメッセージを `?' で区切って指定することができる。 メッセージのテキストで使われた場合、$_は現在のメールファイル名に展開される。 例:
- MAILPATH='/var/mail/bfox? "You have mail":~/shell-mail?"$_ has mail!"'
- Bash はこの変数にデフォルト値を与えるように設定することができる(デフォルトでは値はない)が、使用するユーザーメールファイルの場所はシステムに依存する(例えば、/var/mail/$USER)。
- MAILPATH='/var/mail/bfox? "You have mail":~/shell-mail?"$_ has mail!"'
- OPTERR
- 値1に設定すると、bashはgetopts組み込みコマンドで生成されたエラー・メッセージを表示する(後述のSHELL BUILTIN COMMANDS を参照)。 OPTERRは、シェルが起動されるかシェル・スクリプトが実行されるたびに1に初期化される。
- PATH
- コマンドの検索パス。 コロンで区切られた、シェルがコマンドを探すディレクトリのリストである(後述のCOMMAND EXECUTION を参照)。 PATHの値に長さゼロ(NULL)のディレクトリ名があると、カレントディレクトリを示す。 NULLディレクトリ名は、隣接する2つのコロン、または先頭または末尾のコロンとして表示される。 デフォルトのパスはシステムに依存し、bashをインストールした管理者が設定する。 一般的な値は /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin である。
- POSIXLY_CORRECT
- bashの起動時にこの変数が環境に設定されていると、シェルは起動ファイルを読み込む前にposixモードに入る。 シェルの実行中にこの変数が設定されると、コマンド set -o posix が実行されたかのように、bash は posix モードを有効にする。 シェルが posix モードに入ると、この変数が設定されていなければ設定される。
- PROMPT_COMMAND
- この変数がセットされ、配列である場合、各プライマリプロンプトを発行する前に、 セットされた各要素の値がコマンドとして実行される。 この変数がセットされているが配列変数でない場合、代わりにその値がコマンドとして実行される。
- PROMPT_DIRTRIM
- 0より大きい数値が設定された場合、この値は⦅w⦆と⦅W⦆のプロンプト文字列エスケープを展開するときに保持する末尾のディレク トリ構成要素の数として使用される(下記のPROMPTING を参照)。 削除された文字は省略記号に置き換えられる。
- PS0
- このパラメーターの値は展開され(下記のPROMPTING を参照)、コマンドを読み込んだ後、コマンドが実行される前に対話型シェルによって表示される。
- PS1
- このパラメータの値は展開され(下記のPROMPTING を参照)、プライマリプロンプト文字列として使用される。 デフォルト値は ''s-vv$'' である。
- PS2
- このパラメータの値はPS1と同様に展開され、セカンダリプロンプト文字列と して使用される。 デフォルトは ''> '' である。
- PS3
- このパラメータの値は、selectコマンドのプロンプトとして使われる(上記のSHELL GRAMMAR を参照)。
- PS4
- このパラメータの値は、PS1と同様に展開され、実行トレース中にbashが表示する各コマンドの前に表示される。 PS4の展開された値の最初の文字は、複数のレベルのインダイレクトを示すために、必要に応じて複数回繰り返される。 デフォルトは + である。
- SHELL
- この変数はシェルのフルパス名に展開される。 シェルの起動時に設定されていない場合、bashは現在のユーザーのログインシェルのフルパス名をこの変数に代入する。
- TIMEFORMAT
- このパラメータの値は、時間予約語を先頭に持つパイプラインのタイミン グ情報をどのように表示するかを指定するフォーマット文字列として使用される。 文字は、時間値や他の情報に展開されるエスケープシーケンスを導入する。中括弧は省略可能な部分を示す。
- %%
-
- 文字通りの%。
- %[p][l]R
-
- 経過時間を秒単位で示す。
- %[p][l]U
-
- ユーザーモードで使用されたCPU秒数。
- %[p][l]S
-
- システムモードで使用されたCPU秒数。
- %P
-
- CPU パーセント。(%U + %S) / %R として計算される。
- オプションのpは精度を指定する桁で、小数点以下の端数の桁数を指定する。 0を指定すると小数点以下の端数は出力されない。 小数点以下の桁数は最大3桁まで指定できる。pの値が3より大きい場合は3に変更される。pが指定されない場合は3が使用される。
- オプションのlは、MMmSS.FFsの形式で、分を含む長い書式を指定する。 pの値は、分数を含めるかどうかを決定する。
- この変数が設定されていない場合、bashは$' \nrealt%3lR\nusert%3lU\nsysyt%3lS' という値を持つものとして動作する。 値がNULLの場合、タイミング情報は表示されない。 フォーマット文字列が表示されると、末尾に改行が追加される。
- TMOUT
- 0 より大きい値に設定された場合、TMOUT は read 組み込み関数のデフォルトのタイムアウトとして扱われる。 ターミナルからの入力の場合、TMOUT 秒後に入力がなければ select コマンドは終了する。 対話型シェルでは、この値はプライマリプロンプトを発行してから1行の入力を待つ秒数として解釈される。 Bashは、完全な入力行が到着しない場合、その秒数待った後に終了する。
- TMPDIR
- 設定された場合、bashはこの値をシェルが使用する一時ファイルを作成するディレクトリの名前として使用する。
- auto_resume
- この変数は、シェルがどのようにユーザーとジョブ制御をやりとりするかを制御する。 この変数が設定されている場合、リダイレクトを伴わない 単語の単純なコマンドは、停止している既存のジョブの再開候補として扱われる。 曖昧さは許されない。入力された文字列で始まるジョブが複数ある場合、最も最近アクセスされたジョブが選択される。 この文脈では、停止したジョブの名前は、そのジョブを開始するために使用されたコマンドラインである。 値がexactに設定されている場合、与えられた文字列は、停止したジョブの名前と正確に一致しなければならない。substringに設定されている場合、与えられた文字列は、停止したジョブの名前の部分文字列と一致する必要がある。 substringに設定された場合、提供される文字列は、停止したジョブの名前の部分文字列に一致する必要がある。部分文字列値は、%? 他の値に設定された場合、指定された文字列は停止したジョブの名前の接頭辞でなければならない。
- histchars
- 履歴の展開とトークン化を制御する2文字または3文字である(下記のHISTORY EXPANSION を参照)。 最初の文字はヒストリ展開文字で、ヒストリ展開の開始を示す文字であり、通常は `!' である。 2番目の文字はクイック置換文字で、前に入力したコマンドを再実行するための省略記 号として使われ、コマンド中の文字列を別の文字列に置き換える。 デフォルトは`^'である。オプションの3番目の文字は、単語の最初の文字として見つかった場合に、その行の残りがコメントであることを示す文字で、通常は`#'である。 ヒストリコメント文字は、その行の残りの単語のヒストリ置換をスキップさせる。 シェルパーサが行の残りの部分をコメントとして扱うとは限らない。
Arrays
Bashには、1次元の添字配列変数と連想配列変数が用意されている。 declare組み込み関数は明示的に配列を宣言する。 配列のサイズに上限はなく、メンバにインデックスを付けたり連続的に代入したりする必要もない。 インデックス付き配列は整数(算術式を含む)で参照され、ゼロベースである。 特に断りのない限り、添字付き配列の添字は非負整数でなければならない。
添え字付き配列は、name[subscript]=value という構文で変数が代入されると自動的に作成される。 subscriptは算術式として扱われ、数値として評価されなければならない。 subscriptは無視される。
連想配列は declare -a name で作成される。
属性は、declare および readonly ビルトインを使用して配列変数に指定することができる。 各属性は、配列のすべてのメンバに適用される。
配列の代入には、name=(value1 ... valuen)という形式の複合代入を使用する。 インデックス付き配列の代入では、文字列以外は必要ない。 リストの各値は、後述の EXPANSION で説明するすべてのシェル展開を使って展開される。 subscript付き配列に代入する場合、オプションの括弧と添え字が指定されていれば、そのsubscriptが代入され、そうでなければ、代入される要素の添字は、文によって最後に代入されたsubscriptに1を加えたものになる。 インデックス付けはゼロから始まる。
連想配列に代入する場合、複合代入の単語は、subscriptが必要な代入文か、キーと値を交互に並べたものとして解釈される単語のリスト、name=( key1 value1 key2 value2 ...) のいずれかになる。 これらは、name=( [key1]=value1 [key2]=value2 ...) と同様に扱われる。 リスト内のすべての代入は同じ型でなければならない。 キーと値のペアを使う場合、キーがなかったり空だったりしてはならない。
この構文はdeclare組み込み関数でも受け入れられる。 個々の配列要素には、上で紹介した name[subscript]=value 構文を使用して代入することができる。 subscript付き配列に代入する場合、name に負の数がsubscriptとして付くと、その数は name の最大subscriptより相対的に 1 大きいと解釈されるため、負のsubscriptは配列の末尾から数えていき、-1 のsubscriptは最後の要素を参照する。
配列のどの要素も、${name[subscript]}を使って参照できる。 中括弧は、パス名展開との衝突を避けるために必要である。 subscriptが @ または * の場合、その単語は name のすべてのメンバに展開される。 これらのsubscriptは、単語が二重引用符で囲まれている場合のみ異なる。 単語が二重引用符で囲まれている場合、${name[*]} は各配列メンバの値を IFS 特殊変数の最初の文字で区切った 1 つの単語に展開され、${name[@]} は name の各要素を個別の単語に展開する。 配列メンバがない場合、${name[@]}は何も展開しない。 二重引用符による展開が単語内で行われる場合、最初のパラメータの展開は元の単語の先頭部分と結合され、最後のパラメータの展開は元の単語の最後の部分と結合される。 これは、特殊パラメータ*と@(上記のSpecial Parameters を参照)の展開に類似している。 の長さに展開される。 subscriptが * または @ の場合、展開されるのは配列の要素数である。 インデックス付き配列の要素を参照するために使用される添え字がゼロより小さい数として評価される場合、それは配列の最大インデックスより1つ大きいものに対する相対的なものとして解釈されるので、負のインデックスは配列の終わりからカウントバックし、-1のインデックスは最後の要素を参照する。
subscriptなしで配列変数を参照することは、subscript 0の配列を参照することと同じである。
subscriptに値が割り当てられている場合、配列変数は設定されていると見なされる。 NULL文字列は有効な値である。
配列のキー(subscript)は、値と同様に取得できる。 ${!name[@]} と${!name[*]}は、配列変数名に代入されたsubscriptに展開される。 二重引用符で囲んだ場合の扱いは、二重引用符で囲んだ場合の特殊パラメータ @ と * の展開と同様である。
unsetname[subscript]は、添え字の添え字にある配列要素を破棄する。 インデックス付き配列の負の添え字は、前述のように解釈される。 配列変数の最後の要素をアンセットしても、変数はアンセットされない。name が配列の場合は name をアンセットし、添え字が * または @ の場合は name[subscript] をアンセットすると、配列全体が削除される。
unsetのように、subscript付きの変数名をコマンドの引数として使用する場合、上記の単語展開構文を使用しないと、引数はパス名展開の対象となる。 パス名展開を望まない場合は、引数を引用符で囲む必要がある。
declare、local、readonlyの各ビルトインは、インデックス配列を指定する -aオプションと、連想配列を指定する -Aオプションを受け付ける。 両方のオプションが指定された場合は、-A が優先される。 read 組み込み関数には、標準入力から読み込んだ単語のリストを配列に代入する -a オプションが指定できる。 set および declare 組み込み関数は、配列の値を代入として再利用できるように表示する。
EXPANSION
拡張は、コマンドラインを単語に分割した後に実行される。 ブレース展開、チルダ展開、パラメータと変数の展開、コマンド置換、算術展開、単語分割、パス名展開の7種類の展開が行われる。
展開の順序は、波括弧展開、チルダ展開、パラメータと変数の展開、算術展開、コマンドの置換(左から右へ行う)、単語の分割、パス名の展開である。
これをサポートするシステムでは、さらにプロセス置換という拡張が利用できる。これは、チルダ、パラメータ、変数、算術展開、コマンド置換と同時に実行される。
これらの拡張が実行された後、元の単語に存在する引用符文字は、それ自体が引用符で囲まれていない限り削除される(引用符除去)。
ブレース展開、単語分割、パス名展開だけが展開の単語数を増やすことができ、他の展開は1つの単語を1つの単語に展開する。 唯一の例外は、"$@"と"${name[@]}"の展開、そしてほとんどの場合、上で説明した$*と${name[*]}の展開である(PARAMETERS を参照)。
Brace Expansion
ブレース展開とは、任意の文字列を生成する仕組みである。 この仕組みはパス名展開と似ているが、生成されるファイル名は存在する必要はない。 ブレース展開されるパターンは、オプションのプリアンブルの後に、カンマで区切られた一連の文字列か、中括弧の間のシーケンス式が続き、その後にオプションの追記が続くという形式をとる。プリアンブルは、中括弧内に含まれる各文字列の先頭に付加され、その後、左から右に展開されながら、結果の各文字列に追記される。
中括弧の展開は入れ子にすることができる。 各展開文字列の結果はソートされない。 例えば、a{d,c,b}eは`ade ace abe'に展開される。
シーケンス式は{x..y[..incr]}の形式をとり、xとyは整数または1文字、incrはオプションのインクリメントで整数である。 整数が与えられると、式はxとyの間の各数値に展開される。 各項が同じ幅になるように、整数の前に0を置くことができる。 xまたはyのどちらかが0から始まる場合、シェルは生成されるすべての項に同じ桁数を含ませようとし、必要な場合はゼロパディングを行う。 文字が指定された場合、式はデフォルトのCロケールを使用して、xとyの間で辞書式に各文字に展開される。 xとyは同じ型でなければならないことに注意。 インクリメントを指定すると、各項の差として使用される。 デフォルトの増分は1または-1である。
ブレイス展開は、他の展開の前に実行され、他の展開で特殊な文字は結果に保存される。 これは厳密にテキスト的である。 Bashは、展開の文脈や中括弧間のテキストに構文解釈を適用しない。
正しく形成された中括弧展開は、引用符で囲まれていない開中括弧と閉中括弧、そして少なくとも1つの引用符で囲まれていないカンマ、または有効なシーケンス式を含んでいなければならない。 正しく形成されていない中括弧展開は、そのまま残される。 または,は、ブレース表現の一部とみなされないようにバックスラッシュで囲むことができる。 パラメータ展開との衝突を避けるため、文字列${は波括弧展開の対象とはみなされず、 }を閉じるまで波括弧展開を禁止する。
この構文は、生成する文字列の共通接頭辞が上記の例よりも長い場合に、通常省略記法として使用される:
mkdir /usr/local/src/bash/{old,new,dist,bugs}
or
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
中括弧の拡張は、歴史的なバージョンのshと若干の非互換性をもたらす。shは、中括弧が単語の一部として現れる場合、開閉中括弧を特別に扱わず、出力に中括弧を保持する。 Bashは、中括弧展開の結果として、単語から中括弧を削除する。 例えば、file{1,2}としてshに入力された単語は、出力では同じように表示される。 同じ単語がbashによって展開された後、file1 file2として出力される。 shと厳密な互換性を保ちたい場合は、bashを+Bオプションで起動するか、setコマンドの+Bオプションで中括弧の展開を無効にする(後述のSHELL BUILTIN COMMANDS を参照)。
Tilde Expansion
単語が引用符で囲まれていないチルダ文字(`~')で始まる場合、最初の引用符で囲まれていないスラッシュに先行するすべての文字(引用符で囲まれていないスラッシュがない場合はすべての文字)がチルダ接頭辞とみなされる。 チルダ接頭辞内の文字がどれも引用符で囲まれていない場合、チルダに続くチルダ接頭辞内の文字は、ログイン名として扱われる。 このログイン名がnull 文字列の場合、チルダはシェル・パラメータHOMEの値に置き換えられる。 HOMEが未設定の場合、シェルを実行しているユーザーのホームディレクトリが代わりに置換される。 そうでない場合、チルダ接頭辞は、指定されたログイン名に関連付けられたホームディレクトリに置き換えられる。
tilde-prefix が `~+' の場合、シェル変数 PWD の値が tilde-prefix を置き換える。 チルダ接頭辞が `~-' の場合、シェル変数 OLDPWD が設定されていれば、その値が置き換えられる。tilde-prefixのチルダに続く文字が数字Nで、オプションで先頭に `+' または `-' が付く場合、tilde-prefixはディレクトリスタックの対応する要素に置き換えられる。 tilde-prefixのチルダに続く文字が、先頭に `+' または `-' を含まない数字で構成されている場合、 `+' が仮定される。
ログイン名が無効であるか、チルダ展開に失敗した場合、その単語は変更されない。
各変数の代入では、:または最初の=の直後に引用符で囲まれていないチルダ接頭辞があるかどうかがチェックされる。 その結果、PATH、MAILPATH、CDPATHへの代入でチルダ付きのファイル名を使用することができ、シェルは展開された値を代入する。
Bashは、変数代入の条件を満たす単語が単純なコマンドの引数として現れた場合(上記のPARAMETERS で説明したとおり)にもチルダ展開を行う。 posixモードでは、上記の宣言コマンドを除き、Bashはこの処理を行わない。
Parameter Expansion
文字でパラメータ展開、コマンド置換、算術展開を行う。 中括弧はオプションであるが、展開される変数を、名前の一部と解釈される可能性のある直後の文字から保護する役割を果たす。
中括弧が使われる場合、マッチする終端中括弧は、バックスラッシュでエスケープされていない最初の`}'であり、引用符で囲まれた文字列内でも、埋め込まれた算術展開、コマンド置換、パラメータ展開内でもない。
- ${parameter}
- パラメータの値が置き換えられる。 中括弧が必要なのは、パラメータが1桁以上の位置パラメータである場合、またはパラメータの後に名前の一部として解釈されない文字が続く場合である。 パラメータは、前述のPARAMETERS )または配列参照(Arrays)のシェル・パラメータである。
パラメータの最初の文字が感嘆符(!)であり、パラメータがnamerefでない場合、間接参照レベルが導入される。 Bashは、パラメータの残りの部分を展開してできた値を新しいパラメータとして使用する。その後、この値が展開され、元のパラメータの展開ではなく、残りの展開で使用される。 これは間接展開として知られている。 この値は、チルダ展開、パラメータ展開、コマンド置換、算術展開の対象となる。 parameterがnamerefの場合、完全な間接展開ではなく、parameterによって参照されるパラメーターの名前に展開される。 例外は、後述の${!prefix*}と${!name[@]}の展開である。 感嘆符は、間接展開を行うために左中括弧の直後に置かなければならない。
以下の各ケースにおいて、wordはチルダ展開、パラメータ展開、コマンド置換、算術展開の対象となる。
部分文字列の展開を行わない場合、bashは以下で説明する形式(例::-)で、未設定またはNULLのパラメータをテストする。 コロンを省略すると、未設定のパラメータのみをテストすることになる。
- ${parameter:-word}
- デフォルト値を使用する。 パラメータが未設定またはNULLの場合、wordの展開が代入される。それ以外の場合は、パラメータの値が代入される。
- ${parameter:=word}
- デフォルト値を割り当てる。 パラメータが未設定または NULL の場合、word の展開がパラメータに代入される。 その後、パラメータの値が代入される。 位置パラメーターと特殊パラメーターは、この方法では代入できない。
- ${parameter:?word}
- Nullまたは未設定の場合、エラーを表示する。 パラメータがNULLまたは未設定の場合、wordの展開(wordが存在しない場合はその旨のメッセージ)が標準エラーに書き込まれ、シェルが対話型でない場合は終了する。 そうでなければ、パラメータの値が代入される。
- ${parameter:+word}
- 代替値を使用する。 パラメータがNULLまたは未設定の場合、何も代入されない。
- ${parameter:offset}
- ${parameter:offset:length}
- サブストリング展開。 offsetで指定した文字から、パラメータ値の長さ分まで展開する。 パラメータが @ または * 添え字付き添字配列、連想配列名の場合、結果は以下のように異なる。 lengthが省略された場合、offsetで指定された文字から始まり、値の終わりまで続くパラメータ値の部分文字列に展開される。lengthとoffsetは算術式である(以下のARITHMETIC EVALUATION を参照)。
- offsetが0より小さい数値と評価された場合、その値はパラメータ値の最後からの文字数分のオフセットとして使用される。 lengthが0より小さい数値と評価された場合、それは文字数ではなく、パラメータ値の最後からの文字数のオフセットとして解釈され、拡張はoffsetとその結果の間の文字となる。 負のオフセットは、:-展開と混同しないように、コロンから少なくとも1つのスペースで区切らなければならないことに注意。
- パラメータが@の場合、結果はoffsetから始まる長さの位置パラメータとなる。 負のオフセットは、最大の位置パラメーターよりも相対的に1大きい値として扱われるので、-1のオフセットは最後の位置パラメーターとして評価される。 lengthが0より小さい数に評価されると、展開エラーとなる。
- パラメータが @ または * 添え字付きの添字配列名の場合、結果は ${parameter[offset]}で始まる配列の長さメンバとなる。 負のオフセットは、指定された配列の最大添字より相対的に大きいものとなる。 lengthが0より小さい数に評価されると、展開エラーとなる。
- 連想配列にサブストリング展開を適用すると、未定義の結果が生じる。
- 位置パラメーターが使われない限り、 サブ文字列のインデックスは0ベースである。 offsetが0で、位置パラメーターが使われている場合は、リストの先頭に$0が付く。
- ${!prefix*}
- ${!prefix@}
- プレフィックスに一致する名前。 プレフィックスで始まる変数名を、IFS特殊変数の最初の文字で区切って展開する。 が使われ、展開が二重引用符で囲まれている場合、各変数名は別々の単語に展開される。
- ${!name[@]}
- ${!name[*]}
- 配列のキーのリスト。 nameが配列変数の場合、nameに代入された配列のインデックス(キー)のリストに展開される。 nameが配列でない場合、nameが設定されていれば0に展開され、そうでなければnullに展開される。 が使われ、展開が二重引用符で囲まれている場合、各キーは別々の単語に展開される。
- ${#parameter}
- パラメータの長さ。 パラメータ値の文字数を代入する。 パラメータが*または@の場合、置換される値は位置パラメータの数である。 パラメータが * または @ を添字にした配列名の場合、置換される値は配列の要素数となる。 パラメータが負の数で添字付けされた配列名である場合、その数はパラメータの最大添字より1つ大きい相対数として解釈されるため、負の添字は配列の最後から数えていき、-1の添字は最後の要素を参照する。
- ${parameter#word}
- ${parameter##word}
- マッチする接頭辞パターンを取り除く。 この単語は、パス名展開と同じようにパターンを生成するために展開され、 以下のパターンマッチングのところで説明されているルールを使って、 展開されたパラメータの値とマッチングされる。 もしパターンがパラメー ターの値の先頭にマッチすれば、展開の結果は、最も短いパターン(#の場合)か、 最も長いパターン(###の場合)が削除された、展開されたパラメーター の値となる。 パラメータが@または*の場合、パターン除去操作は各位置のパラメータに順番に適用され、展開結果はリストとなる。 パラメータが@または*で添え字された配列変数の場合、パターン除去操作は配列の各メンバに順番に適用され、展開結果はリストとなる。
- ${parameter%word}
- ${parameter%%word}
- マッチする接尾辞パターンを取り除く。 この単語はパス名展開と同じようにパターンを生成するために展開され、 以下のパターンマッチングのところで説明されているルールを使って、 展開されたパラメータの値とマッチされる。 もしパターンが展開されたパラメータの値の末尾の部分にマッチした場合、 展開の結果は展開されたパラメータの値で、最も短いパターン(%の場合)または 最も長いパターン(%%の場合)が削除されたものになります。 パラメータが@または*の場合、パターン除去操作は各位置のパラメータに順番に適用され、展開結果はリストとなる。 パラメータが@または*で添え字された配列変数である場合、パターン除去操作は配列の各メンバに順番に適用され、展開結果はリストとなる。
- ${parameter/pattern/string}
- パターンの置換。 パス名展開と同じようにパターンが展開され、Parameterが展開され、 パターンとその値との最長一致が文字列に置き換えられる。 マッチは、後述のパターンマッチングで説明するルールで実行される。 patternが/で始まる場合、patternのすべてのマッチが文字列に置き換えられる。通常、最初にマッチしたものだけが置き換えられる。 patternが#で始まる場合、パラメータの展開値の先頭にマッチしなければならない。 patternが%で始まる場合、展開されたパラメータ値の末尾にマッチしなければならない。 文字列がNULLの場合、パターンのマッチは削除され、パターンに続く/は省略される。 nocasematchシェルオプションが有効な場合、アルファベットの大文字小文字を区別せずにマッチが実行される。 パラメータが@または*の場合、置換操作は各位置パラメータに順番に適用され、展開結果はリストとなる。 パラメータが@または*で添え字された配列変数の場合、置換操作は配列の各メンバに順番に適用され、展開結果はリストとなる。
- ${parameter^pattern}
- ${parameter^^pattern}
- ${parameter,pattern}
- ${parameter,,pattern}
- 大文字と小文字を区別する。 この展開では、パラメータ中のアルファベットの大文字小文字を修正する。 パス名展開と同様に、パターンが展開される。 展開されたパラメータ値の各文字は、パターンと照合され、パターンにマッチする場合、大文字小文字が変換される。 パターンは、複数の文字にマッチしてはならない。 演算子 ^ はパターンにマッチする小文字を大文字に変換し、演算子 , はマッチする大文字を小文字に変換する。 と ,, の展開は、展開された値のマッチした各文字を変換する。 ^ と , の展開は、展開された値の最初の文字にのみマッチして変換する。 patternが省略された場合は、すべての文字にマッチする? パラメータが@または*の場合、大文字小文字の修正操作は各位置パラメータに順番に 適用され、展開結果はリストとなる。 パラメータが@または*で添え字された配列変数である場合、大文字小文字の変更操作は配列の各メンバに順番に適用され、展開結果はリストとなる。
- ${parameter@operator}
- パラメータの変換。 演算子の値によって、パラメータ値の変換か、パラメータそのものの情報が展開される。 各演算子は1文字である:
- U 展開は、小文字のアルファベットを大文字に変換したパラメータ値の文字列である。
- u 拡張は、パラメータの値がアルファベットの場合、最初の文字を大文字に変換した文字列である。
- L 展開は、大文字のアルファベットを小文字に変換したパラメータ値の文字列である。
- Q 展開は、入力として再利用できる形式で引用されたパラメータの値である文字列である。
- E 展開は、$'...'クォーテーションの仕組みと同様にバックスラッシュエスケープシーケンスを展開した文字列で、パラメータの値である。
- P この展開は、パラメータ値をプロンプト文字列のように展開した結果の文字列である(下記のPROMPTING を参照)。
- A この展開文は、代入文または宣言コマンドの形をした文字列で、評価されると、パラメータをその属性と値で再作成する。
- K パラメータ値の引用符で囲まれた可能性のあるバージョンを出力する。ただし、インデックス付き配列と連想配列の値は、引用符で囲まれたキーと値のペアのシーケンスとして出力される(上記のArrays を参照)。
- a 展開は、パラメータの属性を表すフラグ値からなる文字列である。
パラメータが@または*の場合、操作は各位置パラメータに順番に適用され、展開結果はリストとなる。 パラメータが@または*で添え字された配列変数の場合、操作は配列の各メンバに順番に適用され、展開結果はリストとなる。
展開結果は、後述の単語分割とパス名展開の対象となる。
Command Substitution
Command substitution allows the output of a command to replace the command name. There are two forms:
$(command)
or
`command`
Bashは、サブシェル環境でコマンドを実行し、コマンドの置換を、末尾の改行が削除されたコマンドの標準出力に置き換えることで、展開を行う。 埋め込まれた改行は削除されないが、単語分割の際に削除されることがある。 コマンド置換$(cat file)は、同等だがより高速な$(< file)で置き換えることができる。
旧式のバッククォート形式の置換を使用する場合、バックスラッシュは、$、`、 \の後に続く場合を除き、リテラルな意味を保持する。 バックスラッシュが先行しない最初のバッククォートは、コマンド置換を終了する。 (command)形式を使用する場合、括弧の間のすべての文字がコマンドを構成する。
コマンド置換は入れ子にすることができる。 バッククォート形式を使用しているときに入れ子にするには、バッククォート内をバックスラッシュでエスケープする。
置換が二重引用符で囲まれている場合、単語分割とパス名展開は行われない。
Arithmetic Expansion
算術展開は、算術式の評価と結果の置換を可能にする。 算術展開の書式は以下の通りである:
$((expression))
旧形式の$[expression]は非推奨であり、次期バージョンのbashでは削除される予定である。
式は二重引用符の中にあるものとして扱われるが、括弧の中の二重引用符は特別に扱われない。 式中のすべてのトークンは、パラメータと変数の展開、コマンドの置換、引用符の除去を受ける。 その結果は、評価される算術式として扱われる。 算術展開は入れ子にすることができる。
評価は、以下のARITHMETIC EVALUATION のルールにしたがって実行される。 式が無効な場合、bashは失敗を示すメッセージを表示し、置換は行われない。
Process Substitution
プロセス置換は、プロセスの入出力をファイル名で参照できるようにする。 <(list)または>(list)の形をとる。 プロセスリストは非同期に実行され、その入出力はファイル名として表示される。 このファイル名は、展開の結果として現在のコマンドの引数として渡される。 (list)形式が使われた場合、ファイルへの書き込みが listへの入力となる。 <(list)形式が使われた場合、引数として渡されたファイルは listの出力を得るために読み込まれなければならない。 プロセス置換は、名前付きパイプ(FIFO)または /dev/fd によるオープンファイルの名前付けをサポートしているシステムでサポートされる。
利用可能な場合、プロセス置換はパラメータや変数の展開、コマンドの置換、算術展開と同時に実行される。
Word Splitting
シェルは、パラメータ展開、コマンド置換、算術展開の結果のうち、二重引用符で囲まれていないものを、単語分割のためにスキャンする。
シェルはIFSの各文字を区切り文字として扱い、これらの文字をフィールドの終端文字として、他の展開の結果を単語に分割する。 IFSが設定されていないか、またはその値がデフォルトの<space><tab><newline>の場合、以前の展開結果の先頭と末尾にある<space>、<tab>、<newline>のシーケンスは無視され、先頭と末尾にないIFS文字のシーケンスは単語を区切る役割を果たす。 IFSの値がデフォルト以外の場合、単語の先頭と末尾にある空白文字スペース、タブ、改行のシーケンスは、空白文字がIFSの値(IFS空白文字)にある限り無視される。 IFSの空白文字以外の文字は、隣接するIFSの空白文字とともに、フィールドを区切る。 IFS空白文字の連続も区切り文字として扱われる。 IFSの値がNULLの場合、単語の分割は行われない。
明示的NULL引数(""または)は保持され、空文字列としてコマンドに渡される。 引用符で囲まれていない暗黙のNULL引数は、値を持たないパラメータが展開された結果、削除される。 値を持たないパラメータが二重引用符で囲まれて展開された場合、NULL引数が保持され、空文字列としてコマンドに渡される。 引用符で囲まれたNULL引数が、NULLでない単語の展開の一部として現れると、NULL引数は削除される。 つまり、単語-dは、単語分割とNULL引数除去の後、-dになる。
展開が行われない場合、分割は行われない。
Pathname Expansion
単語分割の後、-fオプションが設定されていない限り、bashは各単語に*、? 、[ の文字がないかスキャンする。 これらの文字が1つでも出現し、引用符で囲まれていない場合、その単語はパターンとみなされ、パターンにマッチするファイル名のアルファベット順のリストで置き換えられる(下記のPattern Matching を参照)。 マッチするファイル名が見つからず、シェルオプションのnullglobが有効になっていない場合、その単語は変更されない。 nullglobオプションが設定されていて、マッチするものが見つからない場合、その単語は削除される。 failglobシェル・オプションが設定され、マッチが見つからなかった場合、エラー・メッセージが表示され、コマンドは実行されない。 シェル・オプションnocaseglobが有効な場合、アルファベットの大文字小文字を区別せずにマッチが実行される。 [a-z](後述)のような範囲式を使う場合、LC_COLLATEの設定によっては、他の大文字と小文字が含まれる場合があることに注意。 パス名の展開にパターンを使用する場合、シェルオプションの dotglob が設定されていない限り、名前の先頭またはスラッシュの直後の文字 ``. は明示的にマッチさせなければならない。 ファイル名の ``. と ``...' は、dotglobが設定されていても、常に明示的にマッチさせなけれ ばならない。 それ以外の場合、``.文字は特別に扱われない。 パス名をマッチさせる場合、スラッシュ文字は常にパターン中のスラッシュによって 明示的にマッチさせなければならないが、それ以外のマッチングコンテキストでは、 後述のパターンマッチングのところで説明するように、特別なパターン文字によって マッチさせることができる。 nocaseglob、nullglob、failglob、dotglobシェルオプションの説明については、後述のSHELL BUILTIN COMMANDS のshoptの説明を参照のこと。
GLOBIGNOREシェル変数を使用して、パターンにマッチするファイル名のセットを制限することができる。 GLOBIGNOREが設定されると、GLOBIGNOREのパターンの1つにもマッチするファイル名が、マッチするファイル名のリストから取り除かれる。 nocaseglobオプションが設定されている場合、GLOBIGNOREのパターンに対するマッチングは大文字小文字を区別せずに行われる。 ファイル名 ``. と ``...' は、GLOBIGNOREが設定され、NULLでない場合、常に無視される。 しかし、GLOBIGNOREをnullでない値に設定すると、dotglobシェルオプションを有効にする効果があるので、``.で始まる他のすべてのファイル名がマッチするようになる。 .」で始まるファイル名を無視する旧来の動作を得るには、「.*」を GLOBIGNOREのパターンの1つにする。 GLOBIGNOREが設定されていない場合、dotglobオプションは無効になる。 パターンマッチは extglob シェルオプションの設定に従う。
Pattern Matching
以下に説明する特殊パターン文字以外の、パターン中に現れる文字はすべて、それ自体にマッチする。 NUL文字はパターン中に出現してはならない。 バックスラッシュは次の文字をエスケープする。 特殊パターン文字を文字通りにマッチさせる場合は、引用符で囲む必要がある。
特殊パターン文字は以下の意味を持つ:
- *
- NULL文字列を含む任意の文字列にマッチする。 globstarシェル・オプションが有効で、*がパス名展開コンテキストで使用されている場合、隣接する2つの*を1つのパターンとして使用すると、すべてのファイルと0個以上のディレクトリおよびサブディレクトリにマッチする。 の後に / が続く場合、隣接する2つの * はディレクトリとサブディレクトリにのみマッチする。
- ?
- 任意の1文字にマッチする。
- [...]
- 囲まれた文字のいずれかにマッチする。 ハイフンで区切られた2つの文字の組は範囲式を表し、現在のロケールの照合順序と文字セットを 使って、その2つの文字の間にあるすべての文字がマッチする。 に続く最初の文字が「!」または「^」の場合、囲まれていないすべての文字が マッチされる。 範囲式の文字のソート順は、現在のロケールと、LC_COLLATEまたはLC_ALLシェル変数が設定されていればその値によって決定される。 [a-d]が[abcd]と等価であるという範囲式の伝統的な解釈を得るには、 LC_ALLシェル変数の値をCに設定するか、globasciirangesシェルオプションを有効にする。 - は、セットの最初または最後の文字として含めることでマッチする。 ] は、集合の最初の文字として含めることでマッチする。
[ および ]の中では、[:class:]という構文で文字クラスを指定することができる。classは、 POSIX標準に定義されている以下のクラスの1つである。 word文字クラスは、文字、数字、文字_にマッチする。
[ および ] 内では、等価クラスは構文 [=c=] を使って指定することができ、この構文は、文字 c と同じ照合重み(現在のロケールで定義されている)を持つすべての文字にマッチする。
[ および ] 内では、構文 [.symbol.] は照合記号 symbol にマッチする。
shopt 組み込み関数で extglob シェルオプションを有効にすると、いくつかの拡張パターンマッチング演算子が認識される。 以下の説明では、pattern-listは|で区切られた1つ以上のパターンのリストである。 複合パターンは、以下のサブパターンの1つ以上を使用して形成することができる:
- ?(pattern-list)
- 与えられたパターンの0個または1個にマッチする
- *(pattern-list)
- 与えられたパターンの0回以上の出現にマッチする
- +(pattern-list)
- 与えられたパターンの1つ以上の出現にマッチする
- @(pattern-list)
- 与えられたパターンのいずれかにマッチする
- !(pattern-list)
- 与えられたパターンの1つ以外とマッチする
長い文字列に対する複雑な拡張パターンマッチングは、特にパターンが交替を含み、文字列が複数のマッチを含む場合、時間がかかる。 短い文字列に対して別々のマッチを使うか、1つの長い文字列の代わりに文字列の配列を使う方が速いかもしれない。
Quote Removal
前述の展開の後、上記の展開のいずれからも生じなかった、引用符で囲まれていない\, ', " はすべて削除される。
REDIRECTION
コマンドが実行される前に、シェルによって解釈される特別な記法を使って、その入出力をリダイレクトすることができる。 リダイレクトによって、コマンドのファイルハンドルを複製したり、開いたり、閉じたり、異なるファイルを参照させたり、コマンドの読み込み先や書き込み先のファイルを変更したりすることができる。 リダイレクションは、現在のシェル実行環境のファイルハンドルを変更するためにも使用できる。 以下のリダイレクション演算子は、単純なコマンドの前でも、コマンドの後でも、どこにでも現れる。 リダイレクションは左から右の順番で処理される。
ファイル記述子番号で始まるリダイレクションの前に、{varname}という単語を置くこともできる。 この場合、>&-と<&-を除く各リダイレクト演算子に対して、シェルは10以上のファイル記述子を割り当て、それをvarnameに割り当てる。 もし >&- または <&- の前に {varname} があれば、varname の値はクローズするファイル記述子を定義する。 {varname}が与えられると、リダイレクトはコマンドの範囲を超えて持続し、シェルプログラマが自分でファイル記述子を管理できるようになる。
以下の記述において、ファイル記述子番号が省略され、リダイレクション演算子の最初の文字が < の場合、リダイレクションは標準入力(ファイル記述子0)を参照する。 リダイレクション演算子の最初の文字が>の場合、リダイレクションは標準出力(ファイル記述子1)を参照する。
以下の記述でリダイレクション演算子に続く単語は、特に断りのない限り、波括弧展開、チルダ展開、パラメータ展開、変数展開、コマンド置換、算術展開、引用符除去、パス名展開、単語分割の対象となる。 複数の単語に展開された場合、bashはエラーを報告する。
リダイレクトの順番は重要であることに注意。 例えば、コマンド
ls > dirlist 2>&1
は標準出力と標準エラーの両方をファイルdirlistに向ける。
ls 2>&1 > dirlist
なぜなら、標準出力がdirlistにリダイレクトされる前に、標準エラーは標準出力から複製されたからである。
Bashは、リダイレクトで使用されるいくつかのファイル名を、以下の表で説明するように特別に扱う。 bashが実行されているオペレーティング・システムがこれらの特別なファイルを提供している場合、bashはそれらを使用する。そうでない場合は、以下に説明する動作で内部的にエミュレートする。
- /dev/fd/fd
- fdが有効な整数の場合、ファイル記述子fdは複製される。
- /dev/stdin
- ファイル記述子 0 が重複している。
- /dev/stdout
- ファイル記述子 1 が重複している。
- /dev/stderr
- ファイル記述子 2 が重複している。
- /dev/tcp/host/port
- hostに有効なホスト名またはインターネット・アドレスを、portに整数のポート番号またはサービス名を指定すると、bashは対応するTCPソケットを開こうとする。
- /dev/udp/host/port
- hostに有効なホスト名またはインターネット・アドレスを、portに整数のポート番号またはサービス名を指定すると、bashは対応するUDPソケットを開こうとする。
ファイルのオープンまたは作成に失敗すると、リダイレクトは失敗する。
シェルが内部的に使用するファイル記述子と衝突する可能性があるため、9 以上のファイル記述子を使用するリダイレクトは注意して使用すべきである。
exec組み込みコマンドは、現在のシェルでリダイレクトを有効にすることができることに注意すること。
Redirecting Input
入力をリダイレクトすると、wordを展開した結果の名前のファイルが、ファイル記述子n、またはnが指定されていない場合は標準入力(ファイル記述子0)で読み込むためにオープンされる。
入力をリダイレクトする一般的な書式は以下の通りである:
[n]<word
Redirecting Output
出力のリダイレクトは、wordを展開した結果の名前を持つファイルを、ファイル記述子n、またはnが指定されていない場合は標準出力(ファイル記述子1)に書き込むためにオープンする。 ファイルが存在しない場合は作成され、存在する場合はサイズがゼロに切り詰められる。
出力をリダイレクトする一般的な書式は以下の通りである:
[n]>word
リダイレクト演算子が>であり、set 組み込み関数の noclobber オプションが有効になっている場合、 word を展開した結果のファイル名が存在し、かつ通常のファイルであれば、 リダイレクトは失敗する。 リダイレクション演算子が>|であるか、リダイレクション演算子が>であり、 set builtinコマンドのnoclobberオプションが有効になっていない場合、 wordで指定された名前のファイルが存在しても、リダイレクションが試みられる。
Appending Redirected Output
この方法で出力をリダイレクトすると、wordを展開した結果の名前を持つファイルが、ファイル記述子n、またはnが指定されていない場合は標準出力(ファイル記述子1)に追加するためにオープンされる。 ファイルが存在しない場合は作成される。
出力を追加する一般的な書式は以下の通りである:
[n]>>word
Redirecting Standard Output and Standard Error
この構文は、標準出力(ファイル記述子1)と標準エラー出力(ファイル記述子2)の両方を、wordの展開名を持つファイルにリダイレクトすることを可能にする。
標準出力と標準エラーのリダイレクトには2つの形式がある:
&>word
and
>&word
この2つの形式のうち、最初の形式が好まれる。 これは意味的に次のものと等価である。
>word 2>&1
2番目の形式を使用する場合、wordは数字または-に展開されないかもしれない。 その場合、互換性の理由から、他のリダイレクト演算子が適用される(後述のDuplicating File Descriptors を参照)。
Appending Standard Output and Standard Error
この構成では、標準出力(ファイル記述子1)と標準エラー出力(ファイル記述子2)の両方を、wordの展開名を持つファイルに追加することができる。
標準出力と標準エラーを付加する書式は以下の通りである:
&>>word
これは意味的に以下と等価である
>>word 2>&1
(後述の Duplicating File Descriptors 参照)
Here Documents
このタイプのリダイレクトは、区切り文字(末尾に空白を含まない)だけを含む行が表示されるまで、現在のソースから入力を読み込むようにシェルに指示する。 その時点までに読み込まれたすべての行が、コマンドの標準入力(nが指定されている場合はファイル記述子n)として使用される。
here-documentsの書式は以下の通りである:
[n]<<[-]word
here-document
delimiter
wordに対してパラメータや変数の展開、コマンドの置換、算術展開、パス名の展開は行われない。 word の一部が引用符で囲まれている場合、区切り文字は word の引用符除去の結果となり、 ヒアドキュメントの行は展開されない。 wordが引用符で囲まれていない場合、ヒアドキュメントのすべての行はパラメータ展開、コマンド置換、および算術展開の対象となり、文字シーケンスである\<newline>は無視され、\, $、および`は引用符で囲むために使用されなければならない。
リダイレクト演算子が<<-の場合、入力行と区切り文字を含む行から先頭のタブ文字がすべて取り除かれる。 これにより、シェルスクリプト内のヒアドキュメントが自然な形でインデントされる。
Here Strings
here文書の変形で、フォーマットは以下の通りである:
[n]<<<word
wordは、チルダ展開、パラメータ展開、変数展開、コマンド置換、算術展開、引用符除去を受ける。 パス名の展開と単語の分割は行われない。 結果は、改行が付加された単一の文字列として、コマンドの標準入力(nが指定されている場合はファイル記述子n)に供給される。
Duplicating File Descriptors
リダイレクト演算子
[n]<&word
は、入力ファイル記述子を複製するために使われる。 wordが1桁以上に拡張されると、nで示されるファイル記述子はそのファイル記述子のコピーとなる。 wordの数字が入力用にオープンされているファイル記述子を指定しない場合、リダイレクションエラーが発生する。 wordが-と評価された場合、ファイル記述子nはクローズされる。 nが指定されない場合、標準入力(ファイル記述子0)が使用される。
演算子
[n]>&word
は、出力ファイル記述子を複製するために同様に使われる。 nが指定されない場合、標準出力(ファイル記述子1)が使用される。 wordの数字が出力用にオープンされているファイル記述子を指定しない場合、リダイレクションエラーが発生する。 wordが-と評価された場合、ファイル記述子nはクローズされる。 特殊なケースとして、nが省略され、wordが1桁以上の数字または-に展開されない場合、標準出力と標準エラーは前述のようにリダイレクトされる。
Moving File Descriptors
リダイレクト演算子
[n]<&digit-
は、ファイル記述子digitをファイル記述子n、またはnが指定されない場合は標準入力(ファイル記述子0)に移動する。digitはnに複製された後、クローズされる。
同様に、リダイレクト演算子
[n]>&digit-
は、ファイル記述子digitをファイル記述子nに移動し、nが指定されなければ標準出力(ファイル記述子1)に移動する。
Opening File Descriptors for Reading and Writing
リダイレクト演算子
[n]<>word
は、wordを展開した名前を持つファイルを、ファイル記述子n、またはnが指定されない場合はファイル記述子0上で読み書きの両方についてオープンする。 ファイルが存在しない場合は作成される。
ALIASES
エイリアスを使用すると、単純なコマンドの最初の単語として文字列を使用するときに、その文字列を単語の代わりにすることができる。 シェルはエイリアスのリストを保持し、aliasとunalias組み込みコマンドで設定したり解除したりできる(後述のシェル組み込みコマンドを参照)。 各単純コマンドの最初の単語は、引用符で囲まれていない場合、エイリアスを持っているかどうかチェックされる。 もしあれば、その単語はエイリアスのテキストに置き換えられる。 文字 /, $, `, = や、上に挙げたシェルのメタ文字や引用符は、エイリアス名には使えない。 置換テキストには、シェルのメタキャラクタを含む有効なシェル入力を含めることができる。 置換テキストの最初の単語はエイリアスかどうかテストされるが、展開されるエイリアスと同じ単語は2度展開されない。 つまり、例えばlsをls -Fにエイリアスしても、bashは置換テキストを再帰的に展開しようとしない。 エイリアス値の最後の文字が空白の場合、エイリアスに続く次のコマンド語もエイリアス展開がチェックされる。
エイリアスは、aliasコマンドで作成、リストされ、unaliasコマンドで削除される。
置換テキストに引数を使う仕組みはない。 引数が必要な場合は、シェル関数を使うべきである(下記のFUNCTIONSを参照)。
shoptを使用してexpand_aliasesシェルオプションが設定されていない限り、シェルが対話的でないときにはエイリアスは展開されない(shoptについては、後述のSHELL BUILTIN COMMANDS の説明を参照のこと)。
エイリアスの定義と使用に関するルールは少々わかりにくい。 Bashは常に、少なくとも1行の入力と、複合コマンドを構成するすべての行を読み込んでから、その行のコマンドや複合コマンドを実行する。 エイリアスは、コマンドが実行されるときではなく、読み込まれるときに展開される。 したがって、他のコマンドと同じ行に現れたエイリアス定義は、次の入力行が読み込まれるまで有効にならない。 その行のエイリアス定義に続くコマンドは、新しいエイリアスの影響を受けない。 この動作は、関数が実行される際にも問題となる。 関数定義はそれ自体がコマンドであるため、エイリアスは関数が実行されるときではなく、関数定義が読み込まれるときに展開される。 結果として、関数内で定義されたエイリアスは、その関数が実行されるまで使用できない。 安全のため、エイリアス定義は常に別の行に記述し、複合コマンドではエイリアスを使用しないこと。
ほとんどすべての目的において、エイリアスはシェル関数に取って代わられる。
FUNCTIONS
シェル関数は、上記のSHELL GRAMMARで説明したように定義され、後で実行するための一連のコマンドを格納する。 シェル関数の名前が単純なコマンド名として使用されると、その関数名に関連付けられたコマンドのリストが実行される。 関数は現在のシェルのコンテキストで実行され、関数を解釈するために新しいプロセスが作成されることはない(シェルスクリプトの実行とは対照的である)。 関数が実行されると、関数の引数は実行中の位置パラメーターとなる。 特殊パラメータ#は、変更を反映して更新される。 特別パラメータ0は変更されない。 FUNCNAME変数の最初の要素は、関数の実行中に関数名に設定される。
シェル実行環境の他のすべての側面は、これらの例外を除いて、関数とその呼び出し元との間で同一である: DEBUG トラップおよび RETURN トラップ(後述の SHELL BUILTIN COMMANDS にある trap 組み込み関数の説明を参照)は、関数に trace 属性が与えられているか(後述の declare 組み込み関数の説明を参照)、set 組み込み関数で -o functrace シェル・オプションが有効になっていない限り継承されず(この場合、すべての関数は DEBUG トラップおよび RETURN トラップを継承する)、ERR トラップは -o errtrace シェル・オプションが有効になっていない限り継承されない。
関数にローカルな変数は、local builtin コマンドで宣言することができる。 通常、変数とその値は、関数とその呼び出し元との間で共有される。 ローカル変数が宣言された場合、その変数の可視スコープはその関数とその子関数(その関数が呼び出す関数を含む)に限定される。 ローカル変数は、以前のスコープで宣言された同名の変数を「シャドウ」する。 例えば、関数内で宣言されたローカル変数は、同名のグローバル変数を隠蔽する。参照と代入はローカル変数を参照し、グローバル変数は変更されないままである。 関数が戻ると、グローバル変数は再び見えるようになる。
シェルは動的スコープを使用して、関数内の変数の可視性を制御する。 動的スコープでは、可視変数とその値は、実行が現在の関数に到達する原因となった一連の関数呼び出しの結果である。 関数が目にする変数の値は、呼び出し元が「グローバル」スコープであるか、別のシェル関数であるかにかかわらず、呼び出し元での値に依存する。 これは、ローカル変数宣言がshadowする値でもあり、関数が戻ったときに復元される値でもある。
例えば、ある変数varが関数func1内でローカル変数として宣言され、func1が別の関数func2を呼び出した場合、func2内からのvarへの参照はfunc1のローカル変数varに解決され、varという名前のグローバル変数はshadowされる。
unset組み込み関数も、同じダイナミック・スコープを使用して動作する。変数が現在のスコープにローカルな場合、unsetはそれをアンセットする。そうでない場合、unsetは上記のように、呼び出し元のスコープで見つかった変数を参照する。 現在のローカルスコープにある変数がアンセットされた場合、そのスコープでリセットされるか、関数がリターンするまでアンセットのままである。 関数が戻ると、以前のスコープにあったその変数のインスタンスが見えるようになる。 アンセットが前のスコープにある変数に作用した場合、シャドウされていたその名前の変数のインスタンスはすべて見えるようになる。
FUNCNEST変数に0以上の数値を設定すると、関数の最大入れ子レベルが定義される。 この制限を超えた関数呼び出しは、コマンド全体を中断させる。
組み込みコマンドreturnが関数内で実行された場合、関数は完了し、関数呼び出しの次のコマンドで実行が再開される。 RETURNトラップに関連付けられたコマンドは、実行が再開される前に実行される。 関数が完了すると、位置パラメータと特殊パラメータ#の値は、関数実行前の値に戻される。
関数名と定義は、declareまたはtypeset組み込みコマンドの-fオプションでリストすることができる。 declareまたはtypesetの-Fオプションは、関数名のみをリストアップする(extdebugシェル・オプションが有効な場合は、オプションでソース・ファイルと行番号もリストアップされる)。 関数は、export 組み込み関数に -f オプションを付けることで、サブシェルに自動的に定義されるようにエクスポートできる。 関数の定義を削除するには、unset 組み込み関数の -f オプションを使用する。
関数は再帰的に使用できる。 FUNCNEST 変数を使用して、関数呼び出しスタックの深さを制限し、関数の呼び出し回数を制限することができる。 デフォルトでは、再帰呼び出しの回数に制限はない。
ARITHMETIC EVALUATION
シェルでは、特定の条件下で算術式を評価することができる(letおよびdeclare組み込みコマンド、(( 複合コマンド、算術展開参照)。 評価は固定幅の整数で行われ、オーバーフローのチェックは行われないが、0による除算はトラップされ、エラーとしてフラグが立てられる。 演算子とその優先順位、連想順位、値はC言語と同じである。 以下の演算子のリストは、等しい優先順位の演算子のレベルにグループ化されている。 レベルは優先順位の低い順に並んでいる。
id++ id-- variable post-increment and post-decrement - + unary minus and plus ++id --id variable pre-increment and pre-decrement ! ~ logical and bitwise negation ** exponentiation * / % multiplication, division, remainder + - addition, subtraction << >> left and right bitwise shifts <= >= < > comparison == != equality and inequality & bitwise AND ^ bitwise exclusive OR | bitwise OR && logical AND || logical OR expr?expr:expr conditional operator = *= /= %= += -= <<= >>= &= ^= |= assignment expr1 , expr2 comma
式が評価される前にパラメータ展開が行われる。 式中では、パラメータ展開構文を使わずにシェル変数を名前で参照することもできる。 NULLまたは未設定のシェル変数は、パラメータ展開構文を使わずに名前で参照すると0と評価される。 変数の値は、その変数が参照されたとき、または declare -i を使って整数属性を与えられた変数に値が割り当てられたときに、算術式として評価される。 シェル変数は、式で使用するために整数属性をオンにする必要はない。
整数定数はC言語の定義に従うが、接尾辞や文字定数は付けない。 先頭に0を持つ定数は、8進数として解釈される。 先頭の0xまたは0Xは16進数を表す。 それ以外の場合、数値は[base#]nの形をとる。オプションのbaseは算術基底を表す2から64までの10進数で、nはその基底の数値である。 base#が省略された場合は、10進数が使用される。 nを指定する際、数字以外が必要な場合は、9より大きい数字を小文字、大文字、@、_の順で表す。 基数が36以下の場合、小文字と大文字を入れ替えて10以上35以下の数字を表すことができる。
演算子は優先順位の高い順に評価される。 括弧内の部分式は最初に評価され、上記の優先順位の規則を上書きすることができる。
CONDITIONAL EXPRESSIONS
条件式は、[[ 複合コマンド、test および [ 組み込みコマンドで使用され、ファイル属性のテストや文字列比較、算術比較を実行する。 testコマンドと[ コマンドは、引数の数に基づいて動作を決定する。その他のコマンド固有の動作については、これらのコマンドの説明を参照のこと。
式は、以下の単項または二項のプライマリから形成される。 Bashは、いくつかのファイル名が式の中で使われている場合、それらを特別に扱う。 bashが動作しているオペレーティング・システムがこれらの特別なファイルを提供している場合、bashはそれらを使用する: プライマリの1つのファイル引数が/dev/fd/nの場合、ファイル記述子nがチェックされる。 プライマリへのファイル引数が /dev/stdin、/dev/stdout、/dev/stderr のいずれかである場合、 それぞれファイル記述子 0、1、2 がチェックされる。
特に指定がない限り、ファイルを操作するプライマリはシンボリックリンクに従い、リンクそのものではなくリンク先を操作する。
[[と一緒に使うと、<[ 演算子と > 演算子は、現在のロケールを使って辞書順にソートする。 testコマンドはASCII順序でソートする。
- -a file
- ファイルが存在するならば True
- -b file
- ファイルが存在し、ブロックスペシャルファイルならば True
- -c file
- ファイルが存在し、キャラクタースペシャルファイルならば True
- -d file
- ファイルが存在し、ディレクトリーならば True
- -e file
- ファイルが存在するならば True
- -f file
- ファイルが存在し、、レギュラーファイルならば True
- -g file
- ファイルが存在し set-group-id ならば True
- -h file
- ファイルが存在し、シンボリックリンクならば True
- -k file
- ファイルが存在し、その``sticky ビットがセットされているならば True
- -p file
- ファイルが存在しファイルが存在し、名前付きパイプ(FIFO)であれば True
- -r file
- ファイルが存在し、readableであれば True
- -s file
- ファイルが存在し、0より大きいファイルサイズであれば True
- -t fd
- ファイル記述子fdがオープンされていて、端末を参照していれば True
- -u file
- ファイルが存在し、その set-user-id bitがセットされていれば True
- -w file
- ファイルが存在し、writableであるならば True
- -x file
- ファイルが存在し、executableであるならば True
- -G file
- ファイルが存在し、有効なグループIDが所有していれば、True
- -L file
- ファイルが存在し、シンボリックリンクであれば、True
- -N file
- ファイルが存在し、最後に読み込まれてから変更されていれば True
- -O file
- ファイルが存在し、有効なユーザIDに所有されていれば True
- -S file
- ファイルが存在し、ソケットであれば True
- file1 -ef file2
- file1とfile2が、同じデバイスとinode番号に参照されていれば True
- file1 -nt file2
- file1がfile2より(更新日付に従って)新しい場合、またはfile1が存在しfile2が存在しない場合、True
- file1 -ot file2
- file1がfile2より古い場合、またはfile2が存在しfile1が存在しない場合に True
- -o optname
- シェル・オプション optname が有効なら True。以下のset組み込み関数の-oオプションの説明の下にあるオプションのリストを参照のこと。
- -v varname
- シェル変数varnameが設定されている(値が割り当てられている)場合は True
- -R varname
- シェル変数 varname が設定されていて、名前参照であれば True
- -z string
- 文字列の長さが 0であれば True
- string
- -n string
- 文字列の長さが 0以外であれば True
- string1 == string2
- string1 = string2
- POSIXに準拠するためには、testコマンドと一緒に使う必要がある。 [[コマンドと一緒に使うと、上記の(Compound Commands )で説明したパターンマッチングを行う。
- string1 != string2
- 文字列が等しくなければ True
- string1 < string2
- 文字列1が文字列2より辞書順に先にソートされていれば True
- string1 > string2
- 文字列1が文字列2の後に辞書式にソートされていれば True
- arg1 OP arg2
- OPは-eq、-ne、-lt、-le、-gt、-geのいずれかである。これらの算術二項演算子は、それぞれ arg1 が arg2 と等しい、等しくない、未満、以下、以上、または以上の場合に true を返します。arg1とarg2は、正または負の整数である。[[コマンドと併用すると、Arg1とArg2は算術式として評価される(上記のARITHMETIC EVALUATION を参照)。
SIMPLE COMMAND EXPANSION
単純なコマンドが実行されると、シェルは以下の展開、代入、リダイレクションを左から順に実行する。
- パーサーが変数代入としてマークした単語(コマンド名の前にあるもの)とリダイレクションは、後の処理のために保存される。
- 変数代入やリダイレクションでない単語は展開される。 展開後も単語が残っている場合、最初の単語はコマンド名とみなされ、それ以降の単語は引数となる。
- リダイレクションは上記のREDIRECTION の説明に従って実行される。
- 各変数代入の=の後のテキストは、変数に代入される前に、チルダ展開、パラメータ展開、コマンド置換、算術展開、引用符除去を受ける。
コマンド名の結果がない場合、変数への代入は現在のシェル環境に影響する。 そうでなければ、変数は実行されたコマンドの環境に追加され、現在のシェル環境には影響しない。 代入のいずれかが読み取り専用変数に値を代入しようとした場合、エラーが発生し、コマンドは0以外のステータスで終了する。
コマンド名の結果が得られない場合、リダイレクションが実行されるが、現在のシェル環境には影響しない。 リダイレクション・エラーは、コマンドをゼロ以外のステータスで終了させる。
展開後にコマンド名が残っている場合、以下の説明に従って実行が進められる。 そうでなければ、コマンドは終了する。 展開のいずれかにコマンド置換が含まれていた場合、コマンドの終了ステータスは、最後に実行されたコマンド置換の終了ステータスになる。 コマンド置換がなかった場合、コマンドの終了ステータスは0である。
COMMAND EXECUTION
コマンドが単語に分割された後、それが単純なコマンドとオプションの引数リストになる場合、以下のアクションが実行される。
コマンド名にスラッシュが含まれていない場合、シェルはそのコマンドを探そうとする。 その名前のシェル関数が存在する場合、その関数は上記のFUNCTIONS で説明したように呼び出される。 その名前が関数と一致しない場合、シェルはシェル組み込み関数のリストからその関数を検索する。 一致するものが見つかれば、その組み込み関数が呼び出される。
名前がシェル関数でもビルトインでもなく、スラッシュを含まない場合、bashはPATHの各要素からその名前の実行可能ファイルを含むディレクトリを検索する。 Bashは、実行可能ファイルのフルパス名を記憶するためにハッシュテーブルを使用する(以下の「シェル組み込みコマンド」の「ハッシュ」を参照)。 PATH内のディレクトリの完全な検索は、ハッシュテーブルでコマンドが見つからなかった場合にのみ実行される。 検索に失敗した場合、シェルはcommand_not_found_handleという名前の定義されたシェル関数を検索する。 その関数が存在する場合、元のコマンドと元のコマンドの引数を引数として別の実行環境で呼び出され、その関数の終了ステータスがそのサブシェルの終了ステータスになる。 その関数が定義されていない場合、シェルはエラー・メッセージを表示し、終了ステータス127を返す。
検索に成功した場合、またはコマンド名に1つ以上のスラッシュが含まれている場合、シェルは指定されたプログラムを別の実行環境で実行する。 引数0は与えられた名前に設定され、コマンドの残りの引数は、もしあれば与えられた引数に設定される。
ファイルが実行可能形式でなく、ファイルがディレクトリでないためにこの実行が失敗した場合、それはシェルスクリプト(シェルコマンドを含むファイル)であると仮定される。 それを実行するためにサブシェルが生成される。 このサブシェルは自分自身を再初期化するので、あたかも新しいシェルがスクリプトを処理するために呼び出されたかのような効果が得られるが、例外として、親が記憶しているコマンドの位置(後述のSHELL BUILTIN COMMANDS のハッシュを参照)は子シェルに保持される。
プログラムが#!で始まるファイルである場合、最初の行の残りはプログラムのインタープリタを指定する。 シェルは、この実行形式を扱わないオペレーティングシステム上で、指定されたインタプリタを実行する。 インタプリタへの引数は、プログラムの1行目のインタプリタ名に続く1つのオプション引数、プログラム名、コマンド引数(もしあれば)の順で構成される。
COMMAND EXECUTION ENVIRONMENT
シェルは以下の実行環境を持つ:
- 起動時にシェルに継承されるオープンファイル、および exec 組み込み関数に供給されるリダイレクションによって変更されるオープンファイル。
- cd、pushd、または popd によって設定されるか、起動時にシェルによって継承されるカレント作業ディレクトリ。
umaskによって設定されるか、シェルの親から継承されるファイル作成モードマスク
- trapによって設定される現在のトラップ
- 変数代入またはsetで設定された、またはシェルの親から継承された 環境中のシェルパラメータ
- 実行中に定義された、またはシェル親環境から継承されたシェル関数
- (デフォルトまたはコマンドライン引数で)起動時に有効化されるオプション、 または set で有効化されるオプション。
- shoptで有効になるオプション
- aliasで定義されたシェルのエイリアス
- バックグラウンド・ジョブ、$$の値、PPIDの値を含む様々なプロセスID
組み込み関数やシェル関数以外の単純なコマンドを実行する場合、そのコマンドは、以下から構成 される別の実行環境で起動される。 特に断りのない限り、値はシェルから継承される。
- シェルの開いているファイルと、コマンドへのリダイレクトによって指定された変更と追加。
- 現在の作業ディレクトリ
- ファイル作成モードのマスク
- コマンド用にエクスポートされた変数と一緒に、エクスポート用にマークされたシェル変数と関数が環境で渡される。
- シェルによって捕捉されたトラップは、シェルの親から継承された値にリセットされ、シェルによって無視されたトラップは無視される。
この別の環境で起動されたコマンドは、シェルの実行環境に影響を与えることはできない。
コマンド置換、括弧でグループ化されたコマンド、および非同期コマンドは、シェルによって捕捉されたトラップが、シェルが起動時に親から継承した値にリセットされることを除いて、シェル環境の複製であるサブシェル環境で起動される。 パイプラインの一部として呼び出される組み込みコマンドも、サブシェル環境で実行される。 サブシェル環境に加えられた変更は、シェルの実行環境に影響しない。
コマンド置換を実行するために生成されたサブシェルは、親シェルから -e オプションの値を継承する。 posix モードでない場合、bash はそのようなサブシェルで -e オプションをクリアする。
コマンドの後に&が続き、ジョブ制御がアクティブでない場合、コマンドのデフォルト標準入力は空のファイル/dev/nullになる。 それ以外の場合、呼び出されたコマンドは、リダイレクトによって変更された呼び出し元のシェルのファイル記述子を継承する。
ENVIRONMENT
プログラムが起動されると、環境と呼ばれる文字列の配列が与えられる。 これはname=valueという形式の名前と値のペアのリストである。
シェルは環境を操作するいくつかの方法を提供する。 起動時にシェルは自身の環境をスキャンし、見つかった名前ごとにパラメータを作成し、子プロセスにエクスポートするように自動的にマークする。 実行されたコマンドは環境を継承する。 exportコマンドとdeclare -xコマンドにより、パラメータや関数を環境に追加したり、環境から削除したりすることができる。 環境内のパラメータの値が変更されると、新しい値が環境の一部となり、古い値を置き換える。 実行されたコマンドによって継承される環境は、シェルの初期環境からなり、その値はシェルで変更することができ、unsetコマンドで削除されたペアと、exportコマンドとdeclare -xコマンドで追加されたペアが含まれる。
単純なコマンドや関数の環境は、上記のPARAMETERS で説明されているように、パラメータ割り当てを前に置くことで一時的に拡張することができる。 これらの代入文は、そのコマンドが見る環境だけに影響する。
-kオプションが設定されている場合(後述のset builtinコマンドを参照)、コマンド名の前にあるものだけでなく、すべてのパラメータ割り当てがコマンドの環境に置かれる。
bashが外部コマンドを呼び出すと、変数_にコマンドの完全なファイル名が設定され、そのコマンドの環境に渡される。
EXIT STATUS
実行されたコマンドの終了ステータスは、waitpidシステムコールまたは同等の関数が返す値である。 終了ステータスは0から255の間であるが、以下で説明するように、シェルは特別に125以上の値を使用することがある。 シェル組み込み関数と複合コマンドの終了ステータスもこの範囲に制限される。 特定の状況下では、シェルは特定の失敗モードを示すために特別な値を使用する。
シェルの目的上、終了ステータスが0で終了するコマンドは成功したことになる。 ゼロの終了ステータスは成功を示す。 ゼロ以外の終了ステータスは失敗を示す。 致命的シグナルNでコマンドが終了する場合、bashは128+Nの値を終了ステータスとして使用する。
コマンドが見つからない場合、そのコマンドを実行するために作成された子プロセスは127のステータスを返す。 コマンドは見つかったが実行できない場合、ステータスは126となる。
展開中またはリダイレクト中のエラーによりコマンドが失敗した場合、終了ステータスは0より大きくなる。
シェル組み込みコマンドは、成功すれば0(真)のステータスを返し、実行中にエラーが発生すれば0以外(偽)のステータスを返す。 すべての組み込みコマンドは、不正な使用(通常は無効なオプションや引数の欠落)を示す終了ステータス2を返す。
Bash自身は、構文エラーが発生しない限り、最後に実行したコマンドの終了ステータスを返し、その場合はゼロ以外の値で終了する。 以下のexit組み込みコマンドも参照のこと。
SIGNALS
bashが対話型の場合、トラップがなければSIGTERMは無視され(kill 0が対話型シェルを殺すことはない)、SIGINTはキャッチされて処理される(wait組み込み関数が割り込み可能になる)。 すべての場合において、bashはSIGQUITを無視する。 ジョブ制御が有効な場合、bash は SIGTTIN、SIGTTOU、SIGTSTP を無視する。
bashが実行する非ビルティン・コマンドのシグナル・ハンドラは、シェルが親から継承した値に設定される。 ジョブ制御が有効でない場合、非同期コマンドは、これらの継承されたハンドラに加え、SIGINTとSIGQUITも無視する。 コマンド置換の結果として実行されるコマンドは、キーボードから生成されるジョブ制御シグナルSIGTTIN、SIGTTOU、SIGTSTPを無視する。
シェルはデフォルトではSIGHUPを受け取ると終了する。 終了する前に、対話型シェルは実行中または停止中のすべてのジョブに SIGHUP を再送する。 停止しているジョブは、SIGHUP を確実に受信するために SIGCONT が送られる。 シェルが特定のジョブにシグナルを送らないようにするには、 disown 組み込み関数でジョブテーブルからそのジョブを削除するか(後述の SHELL BUILTIN COMMANDS を参照)、 disown -h を使って SIGHUP を受け取らないようにマークする必要がある。
shoptでhuponexitシェルオプションが設定されている場合、対話型ログインシェルが終了すると、bashはすべてのジョブにSIGHUPを送信する。
bashがコマンドの完了を待っているときに、トラップが設定されているシグナルを受信すると、コマンドが完了するまでトラップは実行されない。 bash が wait 組み込み関数で非同期コマンドを待機している場合、トラップが設定されたシグナルを受信すると、wait 組み込み関数は直ちに 128 より大きい終了ステータスで戻り、その直後にトラップが実行される。
JOB CONTROL
ジョブ制御とは、プロセスの実行を選択的に停止(サスペンド)し、後の時点で実行を継続(レジューム)する機能のことである。 ユーザーは通常、オペレーティング・システム・カーネルのターミナル・ドライバとbashが共同で提供する対話型インターフェースを介してこの機能を使用する。
シェルは各パイプラインにジョブを関連付ける。 シェルは現在実行中のジョブのテーブルを保持し、jobsコマンドで一覧できる。 bashがジョブを非同期(バックグラウンド)で開始すると、次のような行が表示される:
- [1] 25647
このジョブがジョブ番号 1 であり、このジョブに関連付けられたパイプラインの最後のプロセスのプロセス ID が 25647 であることを示す。 1つのパイプライン内のすべてのプロセスは同じジョブのメンバーである。 Bashはジョブ制御の基礎としてジョブ抽象化を使用する。
ジョブ制御に対するユーザーインターフェースの実装を容易にするために、オペレーティングシステムは現在の端末プロセスグループIDという概念を保持している。 このプロセスグループのメンバー(プロセスグループIDが現在の端末プロセスグループIDと等しいプロセス)は、SIGINTのようなキーボードが生成するシグナルを受け取る。 これらのプロセスはフォアグラウンドにあると言われる。 バックグランドプロセスとは、プロセスグループIDが端末のものと異なるプロセスのことで、このようなプロセスはキーボードが生成するシグナルを受けない。 フォアグラウンド・プロセスだけが、端末からの読み取りや、 stty tostopでユーザーが指定した場合の端末への書き込みを許可される。 ターミナルからの読み込み(stty tostopが有効な場合はターミナルへの書き込み)を試みるバックグラウンド・プロセスは、カーネルのターミナル・ドライバによってSIGTTIN(SIGTTOU)シグナルが送られ、キャッチされない限り、プロセスは一時停止される。
bashが動作しているオペレーティング・システムがジョブ制御をサポートしている場合、bashにはジョブ制御を使用するための機能が含まれている。 プロセスの実行中にサスペンド文字(通常は^Z、Control-Z)を入力すると、そのプロセスが停止し、制御がbashに戻る。 遅延サスペンド文字(通常は^Y、Control-Y)を入力すると、ターミナルから入力を読み込もうとしたときにプロセスが停止し、制御がbashに戻る。 その後、ユーザーはこのジョブの状態を操作することができ、 bgコマンドを使ってバックグラウンドで継続させたり、fgコマンドを使ってフォアグラウンドで継続させたり、 killコマンドを使って終了させたりすることができる。 Zは即座に有効になり、保留中の出力とtypeaheadが破棄されるという副次的な効果もある。
シェルでジョブを参照する方法はいくつかある。 文字 % は、ジョブ仕様 (jobspec) を示す。 ジョブ番号nは%nと呼ばれる。 また、ジョブの開始時に使用される名前の接頭辞を使用したり、コマンドラインに現れる部分文字列を使用してジョブを参照することもできる。 例えば、%ce は、コマンド名が ce で始まる停止したジョブを指す。 接頭辞が複数のジョブにマッチした場合、bashはエラーを報告する。 一方、%?ceを使うと、コマンドラインにceという文字列を含むジョブを指す。 この部分文字列が複数のジョブにマッチすると、bashはエラーを報告する。 記号%%と%+は、シェルが考える現在のジョブ(フォアグラウンドまたはバックグラウンドで起動中に停止した最後のジョブ)を指す。 前のジョブは %- を使って参照できる。 ジョブが1つしかない場合、%+と%-の両方がそのジョブを指すのに使われる。 ジョブに関する出力(例えばjobsコマンドの出力)では、現在のジョブには常に+、前のジョブには-が付けられる。
1 は ``fg %1 の同義語で、バックグラウンドにあるジョブ 1 をフォアグラウンドにする。 同様に、%1 &はジョブ1をバックグラウンドで再開し、`bg %1と等価である。
シェルはジョブの状態が変わるとすぐにそれを知る。 通常、bashは他の出力を中断しないように、ジョブのステータスの変更を報告する前にプロンプトを表示するまで待つ。 set組み込みコマンドの-bオプションを有効にすると、bashはそのような変更を直ちに報告する。 SIGCHLDに対するトラップは、終了する子プロセスごとに実行される。
ジョブが停止中(または shopt 組み込みコマンドを使用して checkjobs シェル・オプションが有効になっている場合は実行中)に bash を終了しようとすると、シェルは警告メッセージを表示し、checkjobs オプションが有効になっている場合は、ジョブとそのステータスを一覧表示する。 その後、jobsコマンドを使用してステータスを調べることができる。 コマンドを介さずに2回目の終了が試みられた場合、シェルは警告を再度表示せず、停止しているジョブはすべて終了される。
シェルがwait組み込み関数を使用してジョブまたはプロセスを待機しており、ジョブ制御が有効になっている場合、waitはジョブの状態が変化したときに戻る。fオプションを付けると、waitはジョブまたはプロセスが終了するまで待ってから戻るようになる。
PROMPTING
対話的に実行する場合、bashはコマンドを読み込む準備ができたときにプライマリプロンプトPS1を表示し、コマンドを完了するためにさらに入力が必要なときにセカンダリプロンプトPS2を表示する。 Bashはコマンドを読み込んだ後、実行する前にPS0を表示する。 Bashは、-xオプションが有効な場合、各コマンドをトレースする前に上記のようにPS4を表示する。 Bashでは、バックスラッシュでエスケープされた特殊文字を挿入することで、これらのプロンプト文字列をカスタマイズすることができる:
- \a
- ASCIIのベル文字(07)
- \d
- "Weekday Month Date"形式の日付(例:"Tue May 26")
- \D{format}
- formatはstrftime(3)に渡され、その結果がプロンプト文字列に挿入される。 中括弧は必須である。
- \e
- ASCIIエスケープ文字(033)である。
- \h
- 最初の`.'までのホスト名
- \H
- ホスト名
- \j
- shell が現在管理しているジョブ数
- \l
- シェルの端末デバイス名のベースネーム
- \n
- 改行する
- \r
- キャリッジリターン
- \s
- shell の名前、$0 のベースネーム(最後のスラッシュに続く部分)
- \t
- 現在の時刻をHH:MM:SSの24時間形式で表示する。
- \T
- 現在の時刻を12時間HH:MM:SS形式で表示する。
- \@
- 現在時刻を12時間表示のam/pmで表示する。
- \A
- 現在時刻を24時間表示する。
- \u
- 現在のユーザーのユーザー名
- \v
- bash のバージョン(例:2.00)
- \V
- bash のリリース、バージョン+パッチレベル(例:2.00.0)
- \w
- $HOME をチルダで省略した現在の作業ディレクトリ (PROMPT_DIRTRIM 変数の値を使用する)
- \W
- 現在の作業ディレクトリのベースネーム
- \!
- このコマンドの履歴番号
- \#
- このコマンドのコマンド番号
- \$
- 有効UIDが0の場合は#、それ以外は$である
- \nnn
- 8進数のnnnに対応する文字。
- \\
- バックスラッシュ
- \[
- プロンプトに端末制御シーケンスを埋め込むために最初につける
- \]
- 印字しない文字のシーケンスを終了する。
コマンド番号とヒストリ番号は通常異なる。コマンドのヒストリ番号はヒストリリスト内の位置で、ヒストリファイルから復元されたコマンドを含むことがある(下記のHISTORY を参照)。 文字列はデコードされた後、promptvarsシェルオプションの値に従って、パラメータ展開、コマンド置換、算術展開、引用符除去によって展開される(以下のSHELL BUILTIN COMMANDS のshoptコマンドの説明を参照のこと)。 これは、文字列のエスケープされた部分がコマンド置換の中に現れたり、単語展開に特殊な文字を含んでいたりすると、望ましくない副作用をもたらす可能性がある。
READLINE
シェル起動時に--noeditingオプションが指定されていない限り、対話型シェル使用時に入力を読み込む処理を行うライブラリである。 行編集は、read組み込み関数に-eオプションを指定した場合にも使用される。 デフォルトでは、行編集コマンドはEmacsのものと似ている。Viスタイルの行編集インターフェースも利用できる。 行編集は、set 組み込み関数の -o emacs または -o vi オプションを使用することで、いつでも有効にすることができる(後述の「シェル組み込みコマンド」を参照)。 シェルの実行後に行編集をオフにするには、set ビルトインの +o emacs または +o vi オプションを使用する。
Readline Notation
このセクションでは、Emacs流の表記法でキーストロークを表す。 例えば、C-nはControl-Nを意味する。 同様に、メタ・キーはM-keyで表記されるので、M-xはMeta-Xを意味する。 (メタキーのないキーボードでは、M-xはESC x、つまりEscapeキーを押してからxキーを押すことを意味する)。 つまり、Escapeキーを押してからxキーを押す。 M-C-xの組み合わせはESC-Control-xを意味し、つまりEscapeキーを押してからControlキーを押しながらxキーを押す)。
Readlineコマンドには数値引数を与えることができ、通常は繰り返し回数として機能する。 しかし、引数の符号が重要な意味を持つこともある。 順方向に動作するコマンド(例えば、kill-line)に負の引数を渡すと、そのコマンドは逆方向に動作する。 引数による動作がこれと異なるコマンドを以下に記す。
あるコマンドがテキストを殺すと記述されている場合、削除されたテキストは将来取り出せるように保存される(yanking)。 キルされたテキストはキルリングに保存される。 連続してキルされると、テキストは1つのユニットに蓄積され、一度にすべてヤンクすることができる。 テキストをキルしないコマンドは、キルリング上のテキストの塊を分離する。
Readline Initialization
Readlineは、初期化ファイル(inputrcファイル)にコマンドを入れることでカスタマイズされる。 このファイル名はINPUTRC変数の値から取られる。 この変数が設定されていない場合、デフォルトは~/.inputrcである。 そのファイルが存在しないか、読み込めない場合、最終的なデフォルトは/etc/inputrcとなる。 readlineライブラリを使用するプログラムが起動すると、初期化ファイルが読み込まれ、キーバインドと変数が設定される。 readline初期化ファイルには、いくつかの基本的な構文しか許されない。 空白行は無視される。 で始まる行はコメントである。 で始まる行は条件分岐を示す。 その他の行は、キーバインドと変数設定を示す。
デフォルトのキーバインディングはinputrcファイルで変更できる。 このライブラリを使用する他のプログラムは、独自のコマンドやバインディングを追加することができる。
- たとえば、
- M-Control-u: universal-argument
- または、
- C-Meta-u: universal-argument
- を入力すると、M-C-uはreadlineコマンドのuniversal-argumentを実行する。
以下の記号文字名が認識される: RUBOUT、DEL、ESC、LFD、NEWLINE、RET、RETURN、SPC、SPACE、TABである。
コマンド名に加えて、readlineでは、キーを押したときに挿入される文字列(マクロ)にキーをバインドすることができる。
Readline Key Bindings
inputrcファイルでキーバインドを制御する構文は簡単である。 必要なのは、コマンド名またはマクロのテキストと、それをバインドするキー配列だけである。 名前は2つの方法で指定できる。1つはシンボリックなキー名で、Meta-またはControl-という接頭辞をつけることもできるし、もう1つはキー配列である。
keyname:function-nameまたはmacroという形式を使う場合、keynameは英語で綴られたキーの名前である。 例えば:
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"
上記の例では、C-uは関数universal-argumentに、M-DELは関数backward-kill-wordに、C-oは右辺で表現されたマクロを実行する(つまり、テキスト``> outputを行に挿入する)ためにバインドされている。
2番目の形式である "keyseq":function-nameまたはmacroでは、keyseqは上記のkeynameとは異なり、キーシーケンス全体を表す文字列を二重引用符で囲んで指定することができる。 以下の例のように、GNU Emacsスタイルのキーエスケープを使うことができるが、記号文字名は認識されない。
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
この例では、C-uは再び関数universal-argumentにバインドされている。 C-x C-rは関数re-read-init-fileに束縛され、ESC [ 1 1 ~はテキスト``Function Key 1を挿入するために束縛される。
GNU Emacsスタイルのエスケープシーケンス一式は以下の通りである。
\C- control prefix
\M- meta prefix
\e an escape character
\\ backslash
\" literal "
\' literal '
GNU Emacsスタイルのエスケープシーケンスに加えて、2つ目のバックスラッシュエスケープのセットが利用できる:
\a alert (bell)
\b backspace
\d delete
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\nnn the eight-bit character whose value is the octal value nnn (one to three digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
マクロのテキストを入力する際には、マクロ定義を示すために一重引用符または二重引用符を使用しなければならない。 引用符で囲まれていないテキストは関数名とみなされる。 マクロ本文では、前述のバックスラッシュエスケープが展開される。 バックスラッシュは、" や ' を含め、マクロテキスト内の他の文字を引用符で囲む。
Bashでは、bind組み込みコマンドを使用して、現在のreadlineキーバインディングを表示または変更できる。 編集モードは、set builtinコマンドの-oオプションを使用することで、インタラクティブな使用中に切り替えることができる(後述の「SHELL BUILTIN COMMANDS 」を参照)。
Readline Variables
Readlineには、その動作をさらにカスタマイズするために使用できる変数がある。 変数は、inputrcファイルに次のような形式で設定することができる。
- set variable-name value
またはbind組み込みコマンドを使用する(下記の「SHELL BUILTIN COMMANDS 」を参照)。
注意書きがある場合を除き、readline変数は(大文字小文字を区別せずに)OnまたはOffの値を取ることができる。認識できない変数名は無視される。 変数の値が読み込まれるとき、空またはヌル値、"on"(大文字小文字を区別しない)、"1 "は On と等価である。 その他の値はすべて Off と同じである。変数とそのデフォルト値は以下の通りである:
- bell-style (audible)
- readlineが端末のベルを鳴らそうとするときの動作を制御する。 noneに設定すると、readlineはベルを鳴らさない。 visible に設定すると、readline はベルがあればそれを使う。 audibleに設定すると、readlineは端末のベルを鳴らそうとする。
- bind-tty-special-chars (On)
- Onに設定すると、readlineは、カーネルの端末ドライバで特別に扱われる制御文字を、readlineに相当する文字にバインドしようとする。
- blink-matching-paren (Off)
- Onに設定すると、readlineは、閉じ括弧が挿入されたときに、カーソルを開始括弧に短時間移動させようとする。
- colored-completion-prefix (Off)
- Onに設定すると、補完候補を一覧表示する際に、readlineは補完候補の共通接頭辞を別の色で表示する。 色の定義はLS_COLORS環境変数の値から取られる。
- colored-stats (Off)
- Onに設定すると、readlineは、ファイルの種類を示すために、可能性のある補完を異なる色で表示する。 色の定義は、LS_COLORS環境変数の値から取られる。
- comment-begin (``#)
- readline insert-commentコマンド実行時に挿入される文字列。 このコマンドはemacsモードではM-#に、viコマンドモードでは#にバインドされる。
- completion-display-width (-1)
- 補完を実行するときに、マッチする可能性のあるものを表示するために使われる画面の列数。この値が 0 より小さいか、端末の画面幅より大きい場合は無視される。 0を指定すると、マッチは1行に1つずつ表示される。 デフォルト値は -1 である。
- completion-ignore-case (Off)
- Onに設定すると、readlineは大文字小文字を区別せずにファイル名のマッチングと補完を行う。
- completion-map-case (Off)
- Onに設定し、補完-大文字小文字を区別しないを有効にすると、大文字小文字を区別しないファイル名のマッチングと補完を行う際に、readlineはハイフン(-)とアンダースコア(_)を等価なものとして扱う。
- completion-prefix-display-length (0)
- 補完可能リストをそのまま表示する場合の、共通接頭辞の文字数。 ゼロより大きい値に設定すると、この値より長い共通接頭辞は、可能な補完を表示する際に省略記号に置き換えられる。
- completion-query-items (100)
- これは、possible-completionsコマンドによって生成された可能な完了の数の表示について、ユーザーに問い合わせがあったときに決定する。 0以上の任意の整数値を設定することができる。 可能な補完の数がこの変数の値以上であれば、readlineはユーザーがそれらを表示したいかどうかを尋ねる。
- convert-meta (On)
- Onに設定すると、readlineは8ビット目が設定された文字をASCIIキーシーケンスに変換し、8ビット目を除去してエスケープ文字を先頭に付ける(事実上、エスケープをメタプレフィックスとして使用する)。 デフォルトはOnであるが、ロケールに8ビット文字が含まれている場合、readlineはこれをOffに設定する。
- disable-completion (Off)
- Onに設定すると、readlineは単語の補完を禁止する。 補完文字は、あたかも自己挿入にマップされているかのように行に挿入される。
- echo-control-characters (On)
- Onに設定すると、サポートしていることを示すオペレーティング・システム上で、readlineはキーボードから生成された信号に対応する文字をエコーする。
- editing-mode (emacs)
- editing-modeはemacsかviのどちらかに設定できる。
- emacs-mode-string (@)
- show-mode-in-prompt変数が有効な場合、emacs編集モードが有効なとき、この文字列はプライマリプロンプトの最終行の直前に表示される。 この値はキーバインディングのように展開されるので、標準的なメタプレフィックスとコントロールプレフィックス、バックスラッシュエスケープシーケンスのセットが利用できる。 印刷されない文字のシーケンスの開始と終了には、"emacs1 "と "emacs2 "エスケープを使用し、端末制御シーケンスをモード文字列に埋め込むことができる。
- enable-bracketed-paste (On)
- Onに設定すると、readlineは、ペーストされた各文字をキーボードから読み込んだものとして扱うのではなく、1つの文字列として編集バッファに挿入できるように端末を設定する。 これにより、ペーストされた文字が編集コマンドとして解釈されるのを防ぐことができる。
- enable-keypad (Off)
- Onに設定すると、readlineが呼び出されたときに、アプリケーションのキーパッドを有効にしようとする。システムによっては、矢印キーを有効にするためにこれが必要である。
- enable-meta-key (On)
- Onに設定すると、readlineが呼び出されたときに、端末がサポートしていると主張するメタ修飾キーを有効にしようとする。 多くの端末では、メタ・キーは8ビット文字の送信に使われる。
- expand-tilde (Off)
- Onに設定すると、readlineが単語補完を試みる際にチルダ展開が行われる。
- history-preserve-point (Off)
- Onに設定されている場合、ヒストリーコードは、previous-historyまたはnext-historyで検索された各ヒストリー行の同じ位置にポイントを配置しようとする。
- history-size (unset)
- 履歴リストに保存される履歴エントリーの最大数を設定する。 ゼロに設定した場合、既存の履歴エントリーはすべて削除され、 新しいエントリーは保存されない。 ゼロ未満の値を設定すると、ヒストリエントリの数は制限されない。 デフォルトでは、ヒストリエントリ数はシェル変数HISTSIZEの値に設定される。 history-sizeに数値以外の値を設定しようとすると、ヒストリエントリの最大数は500に設定される。
- horizontal-scroll-mode (Off)
- Onに設定すると、readlineは1行で表示するようになり、入力が画面幅より長くなると、改行するのではなく、画面1行で水平方向にスクロールするようになる。 この設定は、高さ1の端末では自動的に有効になる。
- input-meta (Off)
- Onに設定された場合、readlineは8ビット入力を有効にする(つまり、読み取った文字から8ビット目を取り除かない)。meta-flagという名前は、この変数の同義語である。 デフォルトはOffであるが、ロケールに8ビット文字が含まれている場合、readlineはこれをOnに設定する。
- isearch-terminators (``C-[C-J'')
- その文字をコマンドとして実行せずにインクリメンタルサーチを終了させる文字列。 この変数に値が与えられていない場合、文字 ESC と C-J がインクリメンタルサーチを終了する。
- keymap (emacs)
- 現在のreadlineキーマップを設定する。 有効なキーマップ名は、emacs、emacs-standard、 emacs-meta、emacs-ctlx、vi、vi-command、vi-insertである。 デフォルト値はemacsである。editing-modeの値はデフォルトのキーマップにも影響する。
- keyseq-timeout (500)
- 曖昧なキーシーケンス(これまでに読み込まれた入力を使って完全なキーシーケンスを形成できるもの、または、より長いキーシーケンスを完成させるために追加入力を必要とするもの)を読み込む際に、readlineが文字を待つ時間を指定する。 タイムアウト時間内に入力がない場合、readlineは短いが完全なキーシーケンスを使用する。 値はミリ秒単位で指定されるので、1000という値は、readlineが追加入力を1秒待つことを意味する。 この変数に0以下の値、または数値以外の値が設定された場合、readlineは他のキーが押されるまで待ち、どのキーシーケンスを完了させるかを決定する。
- mark-directories (On)
- Onに設定すると、完成したディレクトリ名にスラッシュが付加される。
- mark-modified-lines (Off)
- Onに設定すると、変更されたヒストリー行は、その前にアスタリスク(*)をつけて表示される。
- mark-symlinked-directories (Off)
- Onに設定すると、ディレクトリへのシンボリックリンクである完了した名前にスラッシュが付加される(mark-directoriesの値に従う)。
- match-hidden-files (On)
- この変数を On に設定すると、readline がファイル名補完を行うときに、ファイル名が `.' で始まるファイル (隠しファイル) にマッチするようになる。 Offに設定すると、補完するファイル名の先頭の `.' はユーザーが与えなければならない。
- menu-complete-display-prefix (Off)
- Onに設定すると、メニュー補完は、リストを循環する前に、補完可能なリストの共通接頭辞(空でもよい)を表示する。
- output-meta (Off)
- Onに設定すると、readlineはメタ接頭辞付きエスケープシーケンスとしてではなく、8ビット目が直接設定された文字を表示する。 デフォルトはOffであるが、ロケールに8ビット文字が含まれている場合、readlineはこれをOnに設定する。
- page-completions (On)
- Onに設定すると、readlineは内部のmore-likeページャーを使って、一度に画面いっぱいの完了候補を表示する。
- print-completions-horizontally (Off)
- Onに設定すると、readlineは、マッチした選手を画面の下ではなく、アルファベット順に水平にソートして表示する。
- revert-all-at-newline (Off)
- Onに設定すると、readlineはaccept-lineが実行されたときに戻る前に、履歴行のすべての変更を取り消す。 デフォルトでは、履歴行は変更される可能性があり、readlineの呼び出しにまたがって個々の取り消しリストを保持する。
- show-all-if-ambiguous (Off)
- これは補完関数のデフォルトの動作を変更する。 Onに設定すると、複数の補完候補がある単語は、ベルを鳴らす代わりに、マッチした単語を即座にリストアップする。
- show-all-if-unmodified (Off)
- これはshow-all-if-ambiguousに似た方法で、補完関数のデフォルトの動作を変更する。 Onに設定すると、部分補完の可能性がなく(補完の可能性が共通の接頭辞を持たない)、複数の補完の可能性がある単語は、ベルを鳴らす代わりに、マッチした単語を即座にリストアップする。
- show-mode-in-prompt (Off)
- Onに設定された場合、編集モードを示す文字列をプロンプトの先頭に追加する: emacs、viコマンド、vi挿入。 モード文字列は、ユーザー設定可能である(例えば、emacs-mode-string)。
- skip-completed-text (Off)
- Onに設定すると、単一一致を行に挿入する際のデフォルトの補完動作を変更する。 単語の途中で補完を行う場合にのみ有効である。 有効にすると、readlineは補完された文字が、補完された単語内のポイント以降の文字にマッチしても挿入しないので、カーソルに続く単語の一部が重複しない。
- vi-cmd-mode-string ((cmd))
- show-mode-in-prompt変数が有効な場合、この文字列は、vi編集モードが有効でコマンドモードのとき、プライマリプロンプトの最終行の直前に表示される。 この値は、キーバインディングのように展開されるので、標準的なメタとコントロールの接頭辞とバックスラッシュエスケープシーケンスのセットが利用できる。 非印字文字のシーケンスの開始と終了には、"˶1 "と"˶2 "エスケープを使用する。"˶1 "と"˶2 "エスケープは、端末制御シーケンスをモード文字列に埋め込むために使用できる。
- vi-ins-mode-string ((ins))
- show-mode-in-prompt変数が有効な場合、この文字列は、vi編集モードが有効で挿入モードのとき、主プロンプトの最終行の直前に表示される。 この値は、キーバインディングのように展開されるので、標準的なメタとコント ロール接頭辞のセットとバックスラッシュ・エスケープ・シーケンスが利用できる。 非印字文字のシーケンスの開始と終了には、ⅳ1とⅳ2エスケープを使用する。
- visible-stats (Off)
- On に設定すると、 stat(2) が報告するファイルのタイプを示す文字が、 補完の可能性をリストする際にファイル名に付加される。
Readline Conditional Constructs
Readlineは、Cプリプロセッサの条件付きコンパイル機能に似た機能を実装しており、テストの結果としてキーバインディングや変数設定を実行することができる。 使用されるパーサ・ディレクティブは4つある。
- $if
- $if構文では、編集モード、使用中の端末、readlineを使用するアプリケーションに 基づいてバインディングを行うことができる。 比較演算子の後のテスト・テキストは行末まで続く。
- mode
- ifディレクティブのmode=は、readlineがemacsモードかviモードかをテストするために使われる。 これは、例えば、readlineがemacsモードで起動している場合にのみ、emacs-standardとemacs-ctlxのキーマップのバインディングを設定するために、set keymapコマンドと組み合わせて使用することができる。
- term
- term=形式は、端末固有のキーバインディングを含めるために使用される。おそらく、 端末のファンクションキーが出力するキーシーケンスをバインドするためであろう。 の右側の単語は、端末のフルネームと、端末名の最初の - より前の部分の両方に対してテストされる。 これにより、例えばsunはsunとsun-cmdの両方にマッチする。
- version
- バージョン・テストは、特定のリードライン・バージョンとの比較を実行するために使用することができる。 バージョンは現在のリードラインバージョンに展開される。 比較演算子のセットには、=、(と==)、!=、<=、>=、<、>がある。 演算子の右側に与えられるバージョン番号は、メジャーバージョン番号、オプションの小数点、オプションのマイナーバージョン(例えば、7.1)から構成される。マイナーバージョンが省略された場合、それは0であると仮定される。演算子は、文字列バージョンと空白によってバージョン番号の引数から分離することができる。
- application
- アプリケーション構文は、アプリケーション固有の設定を含めるために使用される。 readlineライブラリを使用する各プログラムはアプリケーション名を設定し、初期化ファイルは特定の値をテストすることができる。 これを利用して、キー・シーケンスを特定のプログラムにとって有用な関数にバインドすることができる。 例えば、次のコマンドは、bashで現在または前の単語を引用するキーシーケンスを追加する:
$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
- variable
- 変数構文は、readline変数と値の簡単な等値テストを提供する。 変数名と比較演算子は空白で区切られ、演算子と右辺の値は空白で区切ることができる。 文字列変数もブーリアン変数もテストすることができる。ブール変数は、onとoffの値に対してテストされなければならない。
- $endif
- このコマンドは、前の例で見たように、$ifコマンドを終了させる。
- $else
- $ifディレクティブのこのブランチにあるコマンドは、テストが失敗した場合に実行される。
- $include
- このディレクティブは1つのファイル名を引数として取り、そのファイルからコマンドとバインディングを読み込む。 例えば、以下のディレクティブは/etc/inputrcを読み込む:
$include /etc/inputrc
Searching
Readlineは、指定した文字列を含む行をコマンド履歴(下記のHISTORY を参照)から検索するためのコマンドを提供する。 インクリメンタルとノンインクリメンタルという2つの検索モードがある。
インクリメンタル検索は、ユーザーが検索文字列を入力し終わる前に開始される。 検索文字列が1文字入力されるごとに、readlineは、これまでに入力された文字列と一致する履歴の次のエントリーを表示する。 インクリメンタルサーチでは、目的の履歴項目を見つけるのに必要な文字数だけ検索を行う。 isearch-terminators変数の値に含まれる文字は、インクリメンタルサーチを終了するために使われる。 この変数に値が割り当てられていない場合、EscapeとControl-J文字がインクリメンタルサーチを終了させる。 Control-G はインクリメンタルサーチを中止し、元の行に戻す。 検索が終了すると、検索文字列を含むヒストリエントリがカレント行になる。
ヒストリリストで他の一致するエントリを検索するには、Control-SまたはControl-Rを入力する。これにより、ヒストリを後方または前方に検索し、これまでに入力された検索文字列に一致する次のエントリーを探す。 リードラインコマンドにバインドされている他のキー・シーケンスは、検索を終了し、そのコマンドを実行する。 例えば、改行は検索を終了し、その行を受け入れ、履歴リストからコマンドを実行する。
Readlineは最後のインクリメンタルな検索文字列を記憶している。 新しい検索文字列を定義する文字を挟まずにControl-Rが2つ入力された場合、記憶された検索文字列が使用される。
非インクリメンタル検索では、一致する履歴行の検索を開始する前に、検索文字列全体を読み込む。 検索文字列は、ユーザーが入力することもできるし、現在の行の内容の一部であることもできる。
Readline Command Names
以下は、コマンド名と、それらがバインドされるデフォルトのキー配列のリストである。 キー・シーケンスが付属していないコマンド名は、デフォルトではバインドされていない。 以下の説明では、pointは現在のカーソル位置を指し、markはset-markコマンドによって保存されたカーソル位置を指す。 ポイントとマークの間のテキストは領域と呼ばれる。
移動のためのコマンド
- beginning-of-line (C-a)
- 現在の行の先頭に移動する。
- end-of-line (C-e)
- 最後尾に移動する。
- forward-char (C-f)
- キャラクターを進める。
- backward-char (C-b)
- キャラクターを後退させる。
- forward-word (M-f)
- 次の単語の最後に進む。 単語は英数字で構成される (letters and digits).
- backward-word (M-b)
- 現在または前の単語の先頭に戻る。 単語は英数字(文字と数字)で構成される。
- shell-forward-word
- 次の単語の最後に進む。 単語は引用符で囲まれていないシェルのメタ文字で区切られる。
- shell-backward-word
- 現在または前の単語の先頭に戻る。 単語は引用符で囲まれていないシェルのメタ文字で区切られる。
- previous-screen-line
- pointを、前の物理的画面行の同じ物理的画面列に移動しようとする。これは、現在のReadline行が1行以上の物理的な行を占めない場合や、 pointがプロンプトの長さにスクリーンの幅を加えた長さより大きくない場合には、望ましい効果をもたらさない。
- next-screen-line
- 次の物理的なスクリーン行の同じ物理的なスクリーン列に点を移動しようとする。これは、現在の行が1行以上の物理的な行を占めない場合や、現在の行の長さがプロンプトの長さに画面の幅を足した長さより大きくない場合には、望ましい効果をもたらさない。
- clear-display (M-C-l)
- 画面と、可能なら端末のスクロールバックバッファをクリアし、現在の行を画面の一番上に残して再描画する。
- clear-screen (C-l)
- 画面をクリアし、現在の行を画面の一番上に残して再描画する。 引数を指定すると、画面をクリアせずに現在の行を更新する。
- redraw-current-line
- 現在の行を更新する。
Commands for Manipulating the History
- accept-line (Newline, Return)
- Accept the line regardless of where the cursor is. If this line is non-empty, add it to the history list according to the state of the HISTCONTROL variable. If the line is a modified history line, then restore the history line to its original state.
- previous-history (C-p)
- Fetch the previous command from the history list, moving back in the list.
- next-history (C-n)
- Fetch the next command from the history list, moving forward in the list.
- beginning-of-history (M-<)
- Move to the first line in the history.
- end-of-history (M->)
- Move to the end of the input history, i.e., the line currently being entered.
- reverse-search-history (C-r)
- Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search.
- forward-search-history (C-s)
- Search forward starting at the current line and moving `down' through the history as necessary. This is an incremental search.
- non-incremental-reverse-search-history (M-p)
- Search backward through the history starting at the current line using a non-incremental search for a string supplied by the user.
- non-incremental-forward-search-history (M-n)
- Search forward through the history using a non-incremental search for a string supplied by the user.
- history-search-forward
- Search forward through the history for the string of characters between the start of the current line and the point. This is a non-incremental search.
- history-search-backward
- Search backward through the history for the string of characters between the start of the current line and the point. This is a non-incremental search.
- history-substring-search-backward
- Search backward through the history for the string of characters between the start of the current line and the current cursor position (the point). The search string may match anywhere in a history line. This is a non-incremental search.
- history-substring-search-forward
- Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search.
- yank-nth-arg (M-C-y)
- Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument n, insert the nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the nth word from the end of the previous command. Once the argument n is computed, the argument is extracted as if the "!n" history expansion had been specified.
- yank-last-arg (M-., M-_)
- Insert the last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last word, as if the "!$" history expansion had been specified.
- shell-expand-line (M-C-e)
- Expand the line as the shell does. This performs alias and history expansion as well as all of the shell word expansions. See HISTORY EXPANSION below for a description of history expansion.
- history-expand-line (M-^)
- Perform history expansion on the current line. See HISTORY EXPANSION below for a description of history expansion.
- magic-space
- Perform history expansion on the current line and insert a space. See HISTORY EXPANSION below for a description of history expansion.
- alias-expand-line
- Perform alias expansion on the current line. See ALIASES above for a description of alias expansion.
- history-and-alias-expand-line
- Perform history and alias expansion on the current line.
- insert-last-argument (M-., M-_)
- A synonym for yank-last-arg.
- operate-and-get-next (C-o)
- Accept the current line for execution and fetch the next line relative to the current line from the history for editing. A numeric argument, if supplied, specifies the history entry to use instead of the current line.
- edit-and-execute-command (C-x C-e)
- Invoke an editor on the current command line, and execute the result as shell commands.
- Bash attempts to invoke $VISUAL, $EDITOR, and emacs as the editor, in that order.
Commands for Changing Text
- end-of-file (usually C-d)
- The character indicating end-of-file as set, for example, by ``stty. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF.
- delete-char (C-d)
- Delete the character at point. If this function is bound to the same character as the tty EOF character, as C-d commonly is, see above for the effects.
- backward-delete-char (Rubout)
- Delete the character behind the cursor. When given a numeric argument, save the deleted text on the kill ring.
- forward-backward-delete-char
- Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted.
- quoted-insert (C-q, C-v)
- Add the next character typed to the line verbatim. This is how to insert characters like C-q, for example.
- tab-insert (C-v TAB)
- Insert a tab character.
- self-insert (a, b, A, 1, !, ...)
- Insert the character typed.
- transpose-chars (C-t)
- Drag the character before point forward over the character at point, moving point forward as well. If point is at the end of the line, then this transposes the two characters before point. Negative arguments have no effect.
- transpose-words (M-t)
- Drag the word before point past the word after point, moving point over that word as well. If point is at the end of the line, this transposes the last two words on the line.
- upcase-word (M-u)
- Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move point.
- downcase-word (M-l)
- Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move point.
- capitalize-word (M-c)
- Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move point.
- overwrite-mode
- Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only emacs mode; vi mode does overwrite differently. Each call to readline() starts in insert mode. In overwrite mode, characters bound to self-insert replace the text at point rather than pushing the text to the right. Characters bound to backward-delete-char replace the character before point with a space. By default, this command is unbound.
Killing and Yanking
- kill-line (C-k)
- Kill the text from point to the end of the line.
- backward-kill-line (C-x Rubout)
- Kill backward to the beginning of the line.
- unix-line-discard (C-u)
- Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring.
- kill-whole-line
- Kill all characters on the current line, no matter where point is.
- kill-word (M-d)
- Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as those used by forward-word.
- backward-kill-word (M-Rubout)
- Kill the word behind point. Word boundaries are the same as those used by backward-word.
- shell-kill-word
- Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as those used by shell-forward-word.
- shell-backward-kill-word
- Kill the word behind point. Word boundaries are the same as those used by shell-backward-word.
- unix-word-rubout (C-w)
- Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring.
- unix-filename-rubout
- Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring.
- delete-horizontal-space (M-\)
- Delete all spaces and tabs around point.
- kill-region
- Kill the text in the current region.
- copy-region-as-kill
- Copy the text in the region to the kill buffer.
- copy-backward-word
- Copy the word before point to the kill buffer. The word boundaries are the same as backward-word.
- copy-forward-word
- Copy the word following point to the kill buffer. The word boundaries are the same as forward-word.
- yank (C-y)
- Yank the top of the kill ring into the buffer at point.
- yank-pop (M-y)
- Rotate the kill ring, and yank the new top. Only works following yank or yank-pop.
Numeric Arguments
- digit-argument (M-0, M-1, ..., M--)
- Add this digit to the argument already accumulating, or start a new argument. M-- starts a negative argument.
- universal-argument
- This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is followed by digits, executing universal-argument again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit nor minus sign, the argument count for the next command is multiplied by four. The argument count is initially one, so executing this function the first time makes the argument count four, a second time makes the argument count sixteen, and so on.
Completing
- complete (TAB)
- Attempt to perform completion on the text before point. Bash attempts completion treating the text as a variable (if the text begins with $), username (if the text begins with ~), hostname (if the text begins with @), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted.
- possible-completions (M-?)
- List the possible completions of the text before point.
- insert-completions (M-*)
- Insert all completions of the text before point that would have been generated by possible-completions.
- menu-complete
- Similar to complete, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of menu-complete steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of bell-style) and the original text is restored. An argument of n moves n positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to TAB, but is unbound by default.
- menu-complete-backward
- Identical to menu-complete, but moves backward through the list of possible completions, as if menu-complete had been given a negative argument. This command is unbound by default.
- delete-char-or-list
- Deletes the character under the cursor if not at the beginning or end of the line (like delete-char). If at the end of the line, behaves identically to possible-completions. This command is unbound by default.
- complete-filename (M-/)
- Attempt filename completion on the text before point.
- possible-filename-completions (C-x /)
- List the possible completions of the text before point, treating it as a filename.
- complete-username (M-~)
- Attempt completion on the text before point, treating it as a username.
- possible-username-completions (C-x ~)
- List the possible completions of the text before point, treating it as a username.
- complete-variable (M-$)
- Attempt completion on the text before point, treating it as a shell variable.
- possible-variable-completions (C-x $)
- List the possible completions of the text before point, treating it as a shell variable.
- complete-hostname (M-@)
- Attempt completion on the text before point, treating it as a hostname.
- possible-hostname-completions (C-x @)
- List the possible completions of the text before point, treating it as a hostname.
- complete-command (M-!)
- Attempt completion on the text before point, treating it as a command name. Command completion attempts to match the text against aliases, reserved words, shell functions, shell builtins, and finally executable filenames, in that order.
- possible-command-completions (C-x !)
- List the possible completions of the text before point, treating it as a command name.
- dynamic-complete-history (M-TAB)
- Attempt completion on the text before point, comparing the text against lines from the history list for possible completion matches.
- dabbrev-expand
- Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches.
- complete-into-braces (M-{)
- Perform filename completion and insert the list of possible completions enclosed within braces so the list is available to the shell (see Brace Expansion above).
Keyboard Macros
- start-kbd-macro (C-x ()
- Begin saving the characters typed into the current keyboard macro.
- end-kbd-macro (C-x ))
- Stop saving the characters typed into the current keyboard macro and store the definition.
- call-last-kbd-macro (C-x e)
- Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard.
- print-last-kbd-macro ()
- Print the last keyboard macro defined in a format suitable for the inputrc file.
Miscellaneous
- re-read-init-file (C-x C-r)
- Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there.
- abort (C-g)
- Abort the current editing command and ring the terminal's bell (subject to the setting of bell-style).
- do-lowercase-version (M-A, M-B, M-x, ...)
- If the metafied character x is uppercase, run the command that is bound to the corresponding metafied lowercase character. The behavior is undefined if x is already lowercase.
- prefix-meta (ESC)
- Metafy the next character typed. ESC f is equivalent to Meta-f.
- undo (C-_, C-x C-u)
- Incremental undo, separately remembered for each line.
- revert-line (M-r)
- Undo all changes made to this line. This is like executing the undo command enough times to return the line to its initial state.
- tilde-expand (M-&)
- Perform tilde expansion on the current word.
- set-mark (C-@, M-<space>)
- Set the mark to the point. If a numeric argument is supplied, the mark is set to that position.
- exchange-point-and-mark (C-x C-x)
- Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark.
- character-search (C-])
- A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences.
- character-search-backward (M-C-])
- A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences.
- skip-csi-sequence
- Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[.
- insert-comment (M-#)
- Without a numeric argument, the value of the readline comment-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of comment-begin, the value is inserted, otherwise the characters in comment-begin are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. The default value of comment-begin causes this command to make the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell.
- glob-complete-word (M-g)
- The word before point is treated as a pattern for pathname expansion, with an asterisk implicitly appended. This pattern is used to generate a list of matching filenames for possible completions.
- glob-expand-word (C-x *)
- The word before point is treated as a pattern for pathname expansion, and the list of matching filenames is inserted, replacing the word. If a numeric argument is supplied, an asterisk is appended before pathname expansion.
- glob-list-expansions (C-x g)
- The list of expansions that would have been generated by glob-expand-word is displayed, and the line is redrawn. If a numeric argument is supplied, an asterisk is appended before pathname expansion.
- dump-functions
- Print all of the functions and their key bindings to the readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file.
- dump-variables
- Print all of the settable readline variables and their values to the readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file.
- dump-macros
- Print all of the readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file.
- display-shell-version (C-x C-v)
- Display version information about the current instance of bash.
Programmable Completion
When word completion is attempted for an argument to a command for which a completion specification (a compspec) has been defined using the complete builtin (see SHELL BUILTIN COMMANDS below), the programmable completion facilities are invoked.
First, the command name is identified. If the command word is the empty string (completion attempted at the beginning of an empty line), any compspec defined with the -E option to complete is used. If a compspec has been defined for that command, the compspec is used to generate the list of possible completions for the word. If the command word is a full pathname, a compspec for the full pathname is searched for first. If no compspec is found for the full pathname, an attempt is made to find a compspec for the portion following the final slash. If those searches do not result in a compspec, any compspec defined with the -D option to complete is used as the default. If there is no default compspec, bash attempts alias expansion on the command word as a final resort, and attempts to find a compspec for the command word from any successful expansion.
Once a compspec has been found, it is used to generate the list of matching words. If a compspec is not found, the default bash completion as described above under Completing is performed.
First, the actions specified by the compspec are used. Only matches which are prefixed by the word being completed are returned. When the -f or -d option is used for filename or directory name completion, the shell variable FIGNORE is used to filter the matches.
Any completions specified by a pathname expansion pattern to the -G option are generated next. The words generated by the pattern need not match the word being completed. The GLOBIGNORE shell variable is not used to filter the matches, but the FIGNORE variable is used.
Next, the string specified as the argument to the -W option is considered. The string is first split using the characters in the IFS special variable as delimiters. Shell quoting is honored. Each word is then expanded using brace expansion, tilde expansion, parameter and variable expansion, command substitution, and arithmetic expansion, as described above under EXPANSION. The results are split using the rules described above under Word Splitting. The results of the expansion are prefix-matched against the word being completed, and the matching words become the possible completions.
After these matches have been generated, any shell function or command specified with the -F and -C options is invoked. When the command or function is invoked, the COMP_LINE, COMP_POINT, COMP_KEY, and COMP_TYPE variables are assigned values as described above under Shell Variables. If a shell function is being invoked, the COMP_WORDS and COMP_CWORD variables are also set. When the function or command is invoked, the first argument ($1) is the name of the command whose arguments are being completed, the second argument ($2) is the word being completed, and the third argument ($3) is the word preceding the word being completed on the current command line. No filtering of the generated completions against the word being completed is performed; the function or command has complete freedom in generating the matches.
Any function specified with -F is invoked first. The function may use any of the shell facilities, including the compgen builtin described below, to generate the matches. It must put the possible completions in the COMPREPLY array variable, one per array element.
Next, any command specified with the -C option is invoked in an environment equivalent to command substitution. It should print a list of completions, one per line, to the standard output. Backslash may be used to escape a newline, if necessary.
After all of the possible completions are generated, any filter specified with the -X option is applied to the list. The filter is a pattern as used for pathname expansion; a & in the pattern is replaced with the text of the word being completed. A literal & may be escaped with a backslash; the backslash is removed before attempting a match. Any completion that matches the pattern will be removed from the list. A leading ! negates the pattern; in this case any completion not matching the pattern will be removed. If the nocasematch shell option is enabled, the match is performed without regard to the case of alphabetic characters.
Finally, any prefix and suffix specified with the -P and -S options are added to each member of the completion list, and the result is returned to the readline completion code as the list of possible completions.
If the previously-applied actions do not generate any matches, and the -o dirnames option was supplied to complete when the compspec was defined, directory name completion is attempted.
If the -o plusdirs option was supplied to complete when the compspec was defined, directory name completion is attempted and any matches are added to the results of the other actions.
By default, if a compspec is found, whatever it generates is returned to the completion code as the full set of possible completions. The default bash completions are not attempted, and the readline default of filename completion is disabled. If the -o bashdefault option was supplied to complete when the compspec was defined, the bash default completions are attempted if the compspec generates no matches. If the -o default option was supplied to complete when the compspec was defined, readline's default completion will be performed if the compspec (and, if attempted, the default bash completions) generate no matches.
When a compspec indicates that directory name completion is desired, the programmable completion functions force readline to append a slash to completed names which are symbolic links to directories, subject to the value of the mark-directories readline variable, regardless of the setting of the mark-symlinked-directories readline variable.
There is some support for dynamically modifying completions. This is most useful when used in combination with a default completion specified with complete -D. It's possible for shell functions executed as completion handlers to indicate that completion should be retried by returning an exit status of 124. If a shell function returns 124, and changes the compspec associated with the command on which completion is being attempted (supplied as the first argument when the function is executed), programmable completion restarts from the beginning, with an attempt to find a new compspec for that command. This allows a set of completions to be built dynamically as completion is attempted, rather than being loaded all at once.
For instance, assuming that there is a library of compspecs, each kept in a file corresponding to the name of the command, the following default completion function would load completions dynamically:
_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
}
complete -D -F _completion_loader -o bashdefault -o default
HISTORY
When the -o history option to the set builtin is enabled, the shell provides access to the command history, the list of commands previously typed. The value of the HISTSIZE variable is used as the number of commands to save in a history list. The text of the last HISTSIZE commands (default 500) is saved. The shell stores each command in the history list prior to parameter and variable expansion (see EXPANSION above) but after history expansion is performed, subject to the values of the shell variables HISTIGNORE and HISTCONTROL.
On startup, the history is initialized from the file named by the variable HISTFILE (default ~/.bash_history). The file named by the value of HISTFILE is truncated, if necessary, to contain no more than the number of lines specified by the value of HISTFILESIZE. If HISTFILESIZE is unset, or set to null, a non-numeric value, or a numeric value less than zero, the history file is not truncated. When the history file is read, lines beginning with the history comment character followed immediately by a digit are interpreted as timestamps for the following history line. These timestamps are optionally displayed depending on the value of the HISTTIMEFORMAT variable. When a shell with history enabled exits, the last $HISTSIZE lines are copied from the history list to $HISTFILE. If the histappend shell option is enabled (see the description of shopt under SHELL BUILTIN COMMANDS below), the lines are appended to the history file, otherwise the history file is overwritten. If HISTFILE is unset, or if the history file is unwritable, the history is not saved. If the HISTTIMEFORMAT variable is set, time stamps are written to the history file, marked with the history comment character, so they may be preserved across shell sessions. This uses the history comment character to distinguish timestamps from other history lines. After saving the history, the history file is truncated to contain no more than HISTFILESIZE lines. If HISTFILESIZE is unset, or set to null, a non-numeric value, or a numeric value less than zero, the history file is not truncated.
The builtin command fc (see SHELL BUILTIN COMMANDS below) may be used to list or edit and re-execute a portion of the history list. The history builtin may be used to display or modify the history list and manipulate the history file. When using command-line editing, search commands are available in each editing mode that provide access to the history list. The shell allows control over which commands are saved on the history list. The HISTCONTROL and HISTIGNORE variables may be set to cause the shell to save only a subset of the commands entered. The cmdhist shell option, if enabled, causes the shell to attempt to save each line of a multiline command in the same history entry, adding semicolons where necessary to preserve syntactic correctness. The lithist shell option causes the shell to save the command with embedded newlines instead of semicolons. See the description of the shopt builtin below under SHELL BUILTIN COMMANDS for information on setting and unsetting shell options.
HISTORY EXPANSION
The shell supports a history expansion feature that is similar to the history expansion in csh. This section describes what syntax features are available. This feature is enabled by default for interactive shells, and can be disabled using the +H option to the set builtin command (see SHELL BUILTIN COMMANDS below). Non-interactive shells do not perform history expansion by default.
History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly.
History expansion is performed immediately after a complete line is read, before the shell breaks it into words, and is performed on each line individually without taking quoting on previous lines into account. It takes place in two parts. The first is to determine which line from the history list to use during substitution. The second is to select portions of that line for inclusion into the current one. The line selected from the history is the event, and the portions of that line that are acted upon are words. Various modifiers are available to manipulate the selected words. The line is broken into words in the same fashion as when reading input, so that several metacharacter-separated words surrounded by quotes are considered one word. History expansions are introduced by the appearance of the history expansion character, which is ! by default. Only backslash (\) and single quotes can quote the history expansion character, but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string.
Several characters inhibit history expansion if found immediately following the history expansion character, even if it is unquoted: space, tab, newline, carriage return, and =. If the extglob shell option is enabled, ( will also inhibit expansion.
Several shell options settable with the shopt builtin may be used to tailor the behavior of history expansion. If the histverify shell option is enabled (see the description of the shopt builtin below), and readline is being used, history substitutions are not immediately passed to the shell parser. Instead, the expanded line is reloaded into the readline editing buffer for further modification. If readline is being used, and the histreedit shell option is enabled, a failed history substitution will be reloaded into the readline editing buffer for correction. The -p option to the history builtin command may be used to see what a history expansion will do before using it. The -s option to the history builtin may be used to add commands to the end of the history list without actually executing them, so that they are available for subsequent recall.
The shell allows control of the various characters used by the history expansion mechanism (see the description of histchars above under Shell Variables). The shell uses the history comment character to mark history timestamps when writing the history file.
Event Designators
An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list.
- !
- Start a history substitution, except when followed by a blank, newline, carriage return, = or ( (when the extglob shell option is enabled using the shopt builtin).
- !n
- Refer to command line n.
- !-n
- Refer to the current command minus n.
- !!
- Refer to the previous command. This is a synonym for `!-1'.
- !string
- Refer to the most recent command preceding the current position in the history list starting with string.
- !?string[?]
- Refer to the most recent command preceding the current position in the history list containing string. The trailing ? may be omitted if string is followed immediately by a newline. If string is missing, the string from the most recent search is used; it is an error if there is no previous search string.
- ^string1^string2^
- Quick substitution. Repeat the previous command, replacing string1 with string2. Equivalent to ``!!:s^string1^string2^ (see Modifiers below).
- !#
- The entire command line typed so far.
Word Designators
Word designators are used to select desired words from the event. A : separates the event specification from the word designator. It may be omitted if the word designator begins with a ^, $, *, -, or %. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces.
- 0 (zero)
- The zeroth word. For the shell, this is the command word.
- n
- The nth word.
- ^
- The first argument. That is, word 1.
- $
- The last word. This is usually the last argument, but will expand to the zeroth word if there is only one word in the line.
- %
- The first word matched by the most recent `?string?' search, if the search string begins with a character that is part of a word.
- x-y
- A range of words; `-y' abbreviates `0-y'.
- All of the words but the zeroth. This is a synonym for `1-$'. It is not an error to use * if there is just one word in the event; the empty string is returned in that case.
- x*
- Abbreviates x-$.
- x-
- Abbreviates x-$ like x*, but omits the last word. If x is missing, it defaults to 0.
If a word designator is supplied without an event specification, the previous command is used as the event.
Modifiers
After the optional word designator, there may appear a sequence of one or more of the following modifiers, each preceded by a `:'. These modify, or edit, the word or words selected from the history event.
- h
- Remove a trailing filename component, leaving only the head.
- t
- Remove all leading filename components, leaving the tail.
- r
- Remove a trailing suffix of the form .xxx, leaving the basename.
- e
- Remove all but the trailing suffix.
- p
- Print the new command but do not execute it.
- q
- Quote the substituted words, escaping further substitutions.
- x
- Quote the substituted words as with q, but break into words at blanks and newlines. The q and x modifiers are mutually exclusive; the last one supplied is used.
- s/old/new/
- Substitute new for the first occurrence of old in the event line. Any character may be used as the delimiter in place of /. The final delimiter is optional if it is the last character of the event line. The delimiter may be quoted in old and new with a single backslash. If & appears in new, it is replaced by old. A single backslash will quote the &. If old is null, it is set to the last old substituted, or, if no previous history substitutions took place, the last string in a !?string[?] search. If new is null, each matching old is deleted.
- &
- Repeat the previous substitution.
- g
- Cause changes to be applied over the entire event line. This is used in conjunction with `:s' (e.g., `:gs/old/new/') or `:&'. If used with `:s', any delimiter can be used in place of /, and the final delimiter is optional if it is the last character of the event line. An a may be used as a synonym for g.
- G
- Apply the following `s' or `&' modifier once to each word in the event line.
SHELL BUILTIN COMMANDS
Unless otherwise noted, each builtin command documented in this section as accepting options preceded by - accepts -- to signify the end of the options. The :, true, false, and test/[ builtins do not accept options and do not treat -- specially. The exit, logout, return, break, continue, let, and shift builtins accept and process arguments beginning with - without requiring --. Other builtins that accept arguments but are not specified as accepting options interpret arguments beginning with - as invalid options and require -- to prevent this interpretation.
- : [arguments]
- No effect; the command does nothing beyond expanding arguments and performing any specified redirections. The return status is zero.
- . filename [arguments]
- source filename [arguments]
- Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename. If filename does not contain a slash, filenames in PATH are used to find the directory containing filename. The file searched for in PATH need not be executable. When bash is not in posix mode, the current directory is searched if no file is found in PATH. If the sourcepath option to the shopt builtin command is turned off, the PATH is not searched. If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the positional parameters are unchanged. If the -T option is enabled, source inherits any trap on DEBUG; if it is not, any DEBUG trap string is saved and restored around the call to source, and source unsets the DEBUG trap while it executes. If -T is not set, and the sourced file changes the DEBUG trap, the new value is retained when source completes. The return status is the status of the last command exited within the script (0 if no commands are executed), and false if filename is not found or cannot be read.
- alias [-p] [name[=value] ...]
- Alias with no arguments or with the -p option prints the list of aliases in the form alias name=value on standard output. When arguments are supplied, an alias is defined for each name whose value is given. A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded. For each name in the argument list for which no value is supplied, the name and value of the alias is printed. Alias returns true unless a name is given for which no alias has been defined.
- bg [jobspec ...]
- Resume each suspended job jobspec in the background, as if it had been started with &. If jobspec is not present, the shell's notion of the current job is used. bg jobspec returns 0 unless run when job control is disabled or, when run with job control enabled, any specified jobspec was not found or was started without job control.
- bind [-m keymap] [-lpsvPSVX]
- bind [-m keymap] [-q function] [-u function] [-r keyseq]
- bind [-m keymap] -f filename
- bind [-m keymap] -x keyseq:shell-command
- bind [-m keymap] keyseq:function-name
- bind [-m keymap] keyseq:readline-command
- Display current readline key and function bindings, bind a key sequence to a readline function or macro, or set a readline variable. Each non-option argument is a command as it would appear in .inputrc, but each binding or command must be passed as a separate argument; e.g., '"\C-x\C-r": re-read-init-file'. Options, if supplied, have the following meanings:
- -m keymap
- Use keymap as the keymap to be affected by the subsequent bindings. Acceptable keymap names are emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command, and vi-insert. vi is equivalent to vi-command (vi-move is also a synonym); emacs is equivalent to emacs-standard.
- -l
- List the names of all readline functions.
- -p
- Display readline function names and bindings in such a way that they can be re-read.
- -P
- List current readline function names and bindings.
- -s
- Display readline key sequences bound to macros and the strings they output in such a way that they can be re-read.
- -S
- Display readline key sequences bound to macros and the strings they output.
- -v
- Display readline variable names and values in such a way that they can be re-read.
- -V
- List current readline variable names and values.
- -f filename
- Read key bindings from filename.
- -q function
- Query about which keys invoke the named function.
- -u function
- Unbind all keys bound to the named function.
- -r keyseq
- Remove any current binding for keyseq.
- -x keyseq
- shell-command
- Cause shell-command to be executed whenever keyseq is entered. When shell-command is executed, the shell sets the READLINE_LINE variable to the contents of the read‐line line buffer and the READLINE_POINT and READLINE_MARK variables to the current location of the insertion point and the saved insertion point (the mark), respectively. If the executed command changes the value of any of READLINE_LINE, READLINE_POINT, or READLINE_MARK, those new values will be reflected in the editing state.
- -X
- List all key sequences bound to shell commands and the associated commands in a format that can be reused as input.
The return value is 0 unless an unrecognized option is given or an error occurred.
- break [n]
- Exit from within a for, while, until, or select loop. If n is specified, break n levels. n must be ≥ 1. If n is greater than the number of enclosing loops, all enclosing loops are exited. The return value is 0 unless n is not greater than or equal to 1.
- builtin shell-builtin [arguments]
- Execute the specified shell builtin, passing it arguments, and return its exit status. This is useful when defining a function whose name is the same as a shell builtin, retaining the functionality of the builtin within the function. The cd builtin is commonly redefined this way. The return status is false if shell-builtin is not a shell builtin command.
- caller [expr]
- Returns the context of any active subroutine call (a shell function or a script executed with the . or source builtins). Without expr, caller displays the line number and source filename of the current subroutine call. If a non-negative integer is supplied as expr, caller displays the line number, subroutine name, and source file corresponding to that position in the current execution call stack. This extra information may be used, for example, to print a stack trace. The current frame is frame 0. The return value is 0 unless the shell is not executing a subroutine call or expr does not correspond to a valid position in the call stack.
- cd [-L|[-P [-e]] [-@]] [dir]
- Change the current directory to dir. if dir is not supplied, the value of the HOME shell variable is the default. Any additional arguments following dir are ignored. The variable CDPATH defines the search path for the directory containing dir: each directory name in CDPATH is searched for dir. Alternative directory names in CDPATH are separated by a colon (:). A null directory name in CDPATH is the same as the current directory, i.e., ``.. If dir begins with a slash (/), then CDPATH is not used. The -P option causes cd to use the physical directory structure by resolving symbolic links while traversing dir and before processing instances of .. in dir (see also the -P option to the set builtin command); the -L option forces symbolic links to be followed by resolving the link after processing instances of .. in dir. If .. appears in dir, it is processed by removing the immediately previous pathname component from dir, back to a slash or the beginning of dir. If the -e option is supplied with -P, and the current working directory cannot be successfully determined after a successful directory change, cd will return an unsuccessful status. On systems that support it, the -@ option presents the extended attributes associated with a file as a directory. An argument of - is converted to $OLDPWD before the directory change is attempted. If a non-empty directory name from CDPATH is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output. The return value is true if the directory was successfully changed; false otherwise.
- command [-pVv] command [arg ...]
- Run command with args suppressing the normal shell function lookup. Only builtin commands or commands found in the PATH are executed. If the -p option is given, the search for command is performed using a default value for PATH that is guaranteed to find all of the standard utilities. If either the -V or -v option is supplied, a description of command is printed. The -v option causes a single word indicating the command or filename used to invoke command to be displayed; the -V option produces a more verbose description. If the -V or -v option is supplied, the exit status is 0 if command was found, and 1 if not. If neither option is supplied and an error occurred or command cannot be found, the exit status is 127. Otherwise, the exit status of the command builtin is the exit status of command.
- compgen [option] [word]
- Generate possible completion matches for word according to the options, which may be any option accepted by the complete builtin with the exception of -p and -r, and write the matches to the standard output. When using the -F or -C options, the various shell variables set by the programmable completion facilities, while available, will not have useful values.
- The matches will be generated in the same way as if the programmable completion code had generated them directly from a completion specification with the same flags. If word is specified, only those completions matching word will be displayed.
The return value is true unless an invalid option is supplied, or no matches were generated.
- complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat] [-W wordlist]
-
- [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
- complete -pr [-DEI] [name ...]
Specify how arguments to each name should be completed. If the -p option is supplied, or if no options are supplied, existing completion specifications are printed in a way that allows them to be reused as input. The -r option removes a completion specification for each name, or, if no names are supplied, all completion specifications. The -D option indicates that other supplied options and actions should apply to the ``default command completion; that is, completion attempted on a command for which no completion has previously been defined. The -E option indicates that other supplied options and actions should apply to ``empty command completion; that is, completion attempted on a blank line. The -I option indicates that other supplied options and actions should apply to completion on the initial non-assignment word on the line, or after a command delimiter such as ; or |, which is usually command name completion. If multiple options are supplied, the -D option takes precedence over -E, and both take precedence over -I. If any of -D, -E, or -I are supplied, any other name arguments are ignored; these completions only apply to the case specified by the option.
The process of applying these completion specifications when word completion is attempted is described above under Programmable Completion.
Other options, if specified, have the following meanings. The arguments to the -G, -W, and -X options (and, if necessary, the -P and -S options) should be quoted to protect them from expansion before the complete builtin is invoked.
- -o comp-option
- The comp-option controls several aspects of the compspec's behavior beyond the simple generation of completions. comp-option may be one of:
- bashdefault
- Perform the rest of the default bash completions if the compspec generates no matches.
- default
- Use readline's default filename completion if the compspec generates no matches.
- dirnames
- Perform directory name completion if the compspec generates no matches.
- filenames
- Tell readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names, quoting special characters, or suppressing trailing spaces). Intended to be used with shell functions.
- noquote
- Tell readline not to quote the completed words if they are filenames (quoting filenames is the default).
- nosort
- Tell readline not to sort the list of possible completions alphabetically.
- nospace
- Tell readline not to append a space (the default) to words completed at the end of the line.
- plusdirs
- After any matches defined by the compspec are generated, directory name completion is attempted and any matches are added to the results of the other actions.
- bashdefault
- -A action
- The action may be one of the following to generate a list of possible completions:
- alias
- Alias names. May also be specified as -a.
- arrayvar
- Array variable names.
- binding
- Readline key binding names.
- builtin
- Names of shell builtin commands. May also be specified as -b.
- command
- Command names. May also be specified as -c.
- directory
- Directory names. May also be specified as -d.
- disabled
- Names of disabled shell builtins.
- enabled
- Names of enabled shell builtins.
- export
- Names of exported shell variables. May also be specified as -e.
- file
- File names. May also be specified as -f.
- function
- Names of shell functions.
- group
- Group names. May also be specified as -g.
- helptopic
- Help topics as accepted by the help builtin.
- hostname
- Hostnames, as taken from the file specified by the HOSTFILE shell variable.
- job
- Job names, if job control is active. May also be specified as -j.
- keyword
- Shell reserved words. May also be specified as -k.
- running
- Names of running jobs, if job control is active.
- service
- Service names. May also be specified as -s.
- setopt
- Valid arguments for the -o option to the set builtin.
- shopt
- Shell option names as accepted by the shopt builtin.
- signal
- Signal names.
- stopped
- Names of stopped jobs, if job control is active.
- user
- User names. May also be specified as -u.
- variable
- Names of all shell variables. May also be specified as -v.
- alias
- -C command
- command is executed in a subshell environment, and its output is used as the possible completions.
- -F function
- The shell function function is executed in the current shell environment. When the function is executed, the first argument ($1) is the name of the command whose arguments are being completed, the second argument ($2) is the word being completed, and the third argument ($3) is the word preceding the word being completed on the current command line. When it finishes, the possible completions are retrieved from the value of the COMPREPLY array variable.
- -G globpat
- The pathname expansion pattern globpat is expanded to generate the possible completions.
- -P prefix
- prefix is added at the beginning of each possible completion after all other options have been applied.
- -S suffix
- suffix is appended to each possible completion after all other options have been applied.
- -W wordlist
- The wordlist is split using the characters in the IFS special variable as delimiters, and each resultant word is expanded. Shell quoting is honored within wordlist, in order to provide a mechanism for the words to contain shell metacharacters or characters in the value of IFS. The possible completions are the members of the resultant list which match the word being completed.
- -X filterpat
- filterpat is a pattern as used for pathname expansion. It is applied to the list of possible completions generated by the preceding options and arguments, and each completion matching filterpat is removed from the list. A leading ! in filterpat negates the pattern; in this case, any completion not matching filterpat is removed.
- The return value is true unless an invalid option is supplied, an option other than -p or -r is supplied without a name argument, an attempt is made to remove a completion specification for a name for which no specification exists, or an error occurs adding a completion specification.
- compopt [-o option] [-DEI] [+o option] [name]
- Modify completion options for each name according to the options, or for the currently-executing completion if no names are supplied. If no options are given, display the completion options for each name or the current completion. The possible values of option are those valid for the complete builtin described above. The -D option indicates that other supplied options should apply to the ``default command completion; that is, completion attempted on a command for which no completion has previously been defined. The -E option indicates that other supplied options should apply to ``empty command completion; that is, completion attempted on a blank line. The -I option indicates that other supplied options should apply to completion on the initial non-assignment word on the line, or after a command delimiter such as ; or |, which is usually command name completion.
- The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a name for which no completion specification exists, or an output error occurs.
- continue [n]
- Resume the next iteration of the enclosing for, while, until, or select loop. If n is specified, resume at the nth enclosing loop. n must be ≥ 1. If n is greater than the number of enclosing loops, the last enclosing loop (the ``top-level loop) is resumed. The return value is 0 unless n is not greater than or equal to 1.
- declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
- typeset [-aAfFgiIlnrtux] [-p] [name[=value] ...]
Declare variables and/or give them attributes. If no names are given then display the values of variables. The -p option will display the attributes and values of each name. When -p is used with name arguments, additional options, other than -f and -F, are ignored. When -p is supplied without name arguments, it will display the attributes and values of all variables having the attributes specified by the additional options. If no other options are supplied with -p, declare will display the attributes and values of all shell variables. The -f option will restrict the display to shell functions. The -F option inhibits the display of function definitions; only the function name and attributes are printed. If the extdebug shell option is enabled using shopt, the source file name and line number where each name is defined are displayed as well. The -F option implies -f. The -g option forces variables to be created or modified at the global scope, even when declare is executed in a shell function. It is ignored in all other cases. The -I option causes local variables to inherit the attributes (except the nameref attribute) and value of any existing variable with the same name at a surrounding scope. If there is no existing variable, the local variable is initially unset. The following options can be used to restrict output to variables with the specified attribute or to give variables attributes:
- -a
-
- Each name is an indexed array variable (see Arrays above).
- -A
- Each name is an associative array variable (see Arrays above).
- -f
- Use function names only.
- -i
- The variable is treated as an integer; arithmetic evaluation (see ARITHMETIC EVALUATION above) is performed when the variable is assigned a value.
- -l
- When the variable is assigned a value, all upper-case characters are converted to lower-case. The upper-case attribute is disabled.
- -n
- Give each name the nameref attribute, making it a name reference to another variable. That other variable is defined by the value of name. All references, assignments, and attribute modifications to name, except those using or changing the -n attribute itself, are performed on the variable referenced by name's value. The nameref attribute cannot be applied to array variables.
- -r
- Make names readonly. These names cannot then be assigned values by subsequent assignment statements or unset.
- -t
- Give each name the trace attribute. Traced functions inherit the DEBUG and RETURN traps from the calling shell. The trace attribute has no special meaning for variables.
- -u
- When the variable is assigned a value, all lower-case characters are converted to upper-case. The lower-case attribute is disabled.
- -x
- Mark names for export to subsequent commands via the environment.
- Using `+' instead of `-' turns off the attribute instead, with the exceptions that +a and +A may not be used to destroy array variables and +r will not remove the readonly attribute. When used in a function, declare and typeset make each name local, as with the local command, unless the -g option is supplied. If a variable name is followed by =value, the value of the variable is set to value. When using -a or -A and the compound assignment syntax to create array variables, additional attributes do not take effect until subsequent assignments. The return value is 0 unless an invalid option is encountered, an attempt is made to define a function using ``-f foo=bar, an attempt is made to assign a value to a readonly variable, an attempt is made to assign a value to an array variable without using the compound assignment syntax (see Arrays above), one of the names is not a valid shell variable name, an attempt is made to turn off readonly status for a readonly variable, an attempt is made to turn off array status for an array variable, or an attempt is made to display a non-existent function with -f.
- dirs [-clpv] [+n] [-n]
- Without options, displays the list of currently remembered directories. The default display is on a single line with directory names separated by spaces. Directories are added to the list with the pushd command; the popd command removes entries from the list. The current directory is always the first directory in the stack.
- -c
- Clears the directory stack by deleting all of the entries.
- -l
- Produces a listing using full pathnames; the default listing format uses a tilde to denote the home directory.
- -p
- Print the directory stack with one entry per line.
- -v
- Print the directory stack with one entry per line, prefixing each entry with its index in the stack.
- +n
- Displays the nth entry counting from the left of the list shown by dirs when invoked without options, starting with zero.
- -n
- Displays the nth entry counting from the right of the list shown by dirs when invoked without options, starting with zero.
- The return value is 0 unless an invalid option is supplied or n indexes beyond the end of the directory stack.
- disown [-ar] [-h] [jobspec ... | pid ... ]
- Without options, remove each jobspec from the table of active jobs. If jobspec is not present, and neither the -a nor the -r option is supplied, the current job is used. If the -h option is given, each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If no jobspec is supplied, the -a option means to remove or mark all jobs; the -r option without a jobspec argument restricts operation to running jobs. The return value is 0 unless a jobspec does not specify a valid job.
- echo [-neE] [arg ...]
- Output the args, separated by spaces, followed by a newline. The return status is 0 unless a write error occurs. If -n is specified, the trailing newline is suppressed. If the -e option is given, interpretation of the following backslash-escaped characters is enabled. The -E option disables the interpretation of these escape characters, even on systems where they are interpreted by default. The xpg_echo shell option may be used to dynamically determine whether or not echo expands these escape characters by default. echo does not interpret -- to mean the end of options. echo interprets the following escape sequences:
- \a
- alert (bell)
- \b
- backspace
- \c
- suppress further output
- \e
- \E
- an escape character
- \f
- form feed
- \n
- new line
- \r
- carriage return
- \t
- horizontal tab
- \v
- vertical tab
- \\
- backslash
- \0nnn
- the eight-bit character whose value is the octal value nnn (zero to three octal digits)
- \xHH
- the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
- \uHHHH
- the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
- \UHHHHHHHH
- the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
- enable [-a] [-dnps] [-f filename] [name ...]
- Enable and disable builtin shell commands. Disabling a builtin allows a disk command which has the same name as a shell builtin to be executed without specifying a full pathname, even though the shell normally searches for builtins before disk commands. If -n is used, each name is disabled; otherwise, names are enabled. For example, to use the test binary found via the PATH instead of the shell builtin version, run ``enable -n test. The -f option means to load the new builtin command name from shared object filename, on systems that support dynamic loading. The -d option will delete a builtin previously loaded with -f. If no name arguments are given, or if the -p option is supplied, a list of shell builtins is printed. With no other option arguments, the list consists of all enabled shell builtins. If -n is supplied, only disabled builtins are printed. If -a is supplied, the list printed includes all builtins, with an indication of whether or not each is enabled. If -s is supplied, the output is restricted to the POSIX special builtins. The return value is 0 unless a name is not a shell builtin or there is an error loading a new builtin from a shared object.
- eval [arg ...]
The args are read and concatenated together into a single command. This command is then read and executed by the shell, and its exit status is returned as the value of eval. If there are no args, or only null arguments, eval returns 0.
- exec [-cl] [-a name] [command [arguments]]
- If command is specified, it replaces the shell. No new process is created. The arguments become the arguments to command. If the -l option is supplied, the shell places a dash at the beginning of the zeroth argument passed to command. This is what login(1) does. The -c option causes command to be executed with an empty environment. If -a is supplied, the shell passes name as the zeroth argument to the executed command. If command cannot be executed for some reason, a non-interactive shell exits, unless the execfail shell option is enabled. In that case, it returns failure. An interactive shell returns failure if the file cannot be executed. A subshell exits unconditionally if exec fails. If command is not specified, any redirections take effect in the current shell, and the return status is 0. If there is a redirection error, the return status is 1.
- exit [n]
- Cause the shell to exit with a status of n. If n is omitted, the exit status is that of the last command executed. A trap on EXIT is executed before the shell terminates.
- export [-fn] [name[=word]] ...
- export -p
- The supplied names are marked for automatic export to the environment of subsequently executed commands. If the -f option is given, the names refer to functions. If no names are given, or if the -p option is supplied, a list of names of all exported variables is printed. The -n option causes the export property to be removed from each name. If a variable name is followed by =word, the value of the variable is set to word. export returns an exit status of 0 unless an invalid option is encountered, one of the names is not a valid shell variable name, or -f is supplied with a name that is not a function.
- fc [-e ename] [-lnr] [first] [last]
- fc -s [pat=rep] [cmd]
- The first form selects a range of commands from first to last from the history list and displays or edits and re-executes them. First and last may be specified as a string (to locate the last command beginning with that string) or as a number (an index into the history list, where a negative number is used as an offset from the current command number). When listing, a first or last of 0 is equivalent to -1 and -0 is equivalent to the current command (usually the fc command); otherwise 0 is equivalent to -1 and -0 is invalid. If last is not specified, it is set to the current command for listing (so that ``fc -l -10 prints the last 10 commands) and to first otherwise. If first is not specified, it is set to the previous command for editing and -16 for listing.
- The -n option suppresses the command numbers when listing. The -r option reverses the order of the commands. If the -l option is given, the commands are listed on standard output. Otherwise, the editor given by ename is invoked on a file containing those commands. If ename is not given, the value of the FCEDIT variable is used, and the value of EDITOR if FCEDIT is not set. If neither variable is set, vi is used. When editing is complete, the edited commands are echoed and executed.
- In the second form, command is re-executed after each instance of pat is replaced by rep. Command is interpreted the same as first above. A useful alias to use with this is ``r="fc -s", so that typing ``r cc runs the last command beginning with ``cc and typing ``r re-executes the last command.
- If the first form is used, the return value is 0 unless an invalid option is encountered or first or last specify history lines out of range. If the -e option is supplied, the return value is the value of the last command executed or failure if an error occurs with the temporary file of commands. If the second form is used, the return status is that of the command re-executed, unless cmd does not specify a valid history line, in which case fc returns failure.
- fg [jobspec]
- Resume jobspec in the foreground, and make it the current job. If jobspec is not present, the shell's notion of the current job is used. The return value is that of the command placed into the foreground, or failure if run when job control is disabled or, when run with job control enabled, if jobspec does not specify a valid job or jobspec specifies a job that was started without job control.
- getopts optstring name [arg ...]
- getopts is used by shell procedures to parse positional parameters. optstring contains the option characters to be recognized; if a character is followed by a colon, the option is expected to have an argument, which should be separated from it by white space. The colon and question mark characters may not be used as option characters. Each time it is invoked, getopts places the next option in the shell variable name, initializing name if it does not exist, and the index of the next argument to be processed into the variable OPTIND. OPTIND is initialized to 1 each time the shell or a shell script is invoked. When an option requires an argument, getopts places that argument into the variable OPTARG. The shell does not reset OPTIND automatically; it must be manually reset between multiple calls to getopts within the same shell invocation if a new set of parameters is to be used.
- When the end of options is encountered, getopts exits with a return value greater than zero. OPTIND is set to the index of the first non-option argument, and name is set to ?.
- getopts normally parses the positional parameters, but if more arguments are supplied as arg values, getopts parses those instead.
- getopts can report errors in two ways. If the first character of optstring is a colon, silent error reporting is used. In normal operation, diagnostic messages are printed when invalid options or missing option arguments are encountered. If the variable OPTERR is set to 0, no error messages will be displayed, even if the first character of optstring is not a colon.
- If an invalid option is seen, getopts places ? into name and, if not silent, prints an error message and unsets OPTARG. If getopts is silent, the option character found is placed in OPTARG and no diagnostic message is printed.
- If a required argument is not found, and getopts is not silent, a question mark (?) is placed in name, OPTARG is unset, and a diagnostic message is printed. If getopts is silent, then a colon (:) is placed in name and OPTARG is set to the option character found.
- getopts returns true if an option, specified or unspecified, is found. It returns false if the end of options is encountered or an error occurs.
- hash [-lr] [-p filename] [-dt] [name]
- Each time hash is invoked, the full pathname of the command name is determined by searching the directories in $PATH and remembered. Any previously-remembered pathname is discarded. If the -p option is supplied, no path search is performed, and filename is used as the full filename of the command. The -r option causes the shell to forget all remembered locations. The -d option causes the shell to forget the remembered location of each name. If the -t option is supplied, the full pathname to which each name corresponds is printed. If multiple name arguments are supplied with -t, the name is printed before the hashed full pathname. The -l option causes output to be displayed in a format that may be reused as input. If no arguments are given, or if only -l is supplied, information about remembered commands is printed. The return status is true unless a name is not found or an invalid option is supplied.
- help [-dms] [pattern]
- Display helpful information about builtin commands. If pattern is specified, help gives detailed help on all commands matching pattern; otherwise help for all the builtins and shell control structures is printed.
- -d
- Display a short description of each pattern
- -m
- Display the description of each pattern in a manpage-like format
- -s
- Display only a short usage synopsis for each pattern
- The return status is 0 unless no command matches pattern.
- history [n]
- history -c
- history -d offset
- history -d start-end
- history -anrw [filename]
- history -p arg [arg ...]
- history -s arg [arg ...]
- With no options, display the command history list with line numbers. Lines listed with a * have been modified. An argument of n lists only the last n lines. If the shell variable HISTTIMEFORMAT is set and not null, it is used as a format string for strftime(3) to display the time stamp associated with each displayed history entry. No intervening blank is printed between the formatted time stamp and the history line. If filename is supplied, it is used as the name of the history file; if not, the value of HISTFILE is used. Options, if supplied, have the following meanings:
- -c
- Clear the history list by deleting all the entries.
- -d offset
- Delete the history entry at position offset. If offset is negative, it is interpreted as relative to one greater than the last history position, so negative indices count back from the end of the history, and an index of -1 refers to the current history -d command.
- -d start-end
- Delete the history entries between positions start and end, inclusive. Positive and negative values for start and end are interpreted as described above.
- -a
- Append the ``new history lines to the history file. These are history lines entered since the beginning of the current bash session, but not already appended to the history file.
- -n
- Read the history lines not already read from the history file into the current history list. These are lines appended to the history file since the beginning of the current bash session.
- -r
- Read the contents of the history file and append them to the current history list.
- -w
- Write the current history list to the history file, overwriting the history file's contents.
- -p
- Perform history substitution on the following args and display the result on the standard output. Does not store the results in the history list. Each arg must be quoted to disable normal history expansion.
- -s
- Store the args in the history list as a single entry. The last command in the history list is removed before the args are added.
- If the HISTTIMEFORMAT variable is set, the time stamp information associated with each history entry is written to the history file, marked with the history comment character. When the history file is read, lines beginning with the history comment character followed immediately by a digit are interpreted as timestamps for the following history entry. The return value is 0 unless an invalid option is encountered, an error occurs while reading or writing the history file, an invalid offset is supplied as an argument to -d, or the history expansion supplied as an argument to -p fails.
- jobs [-lnprs] [ jobspec ... ]
- jobs -x command [ args ... ]
- The first form lists the active jobs. The options have the following meanings:
- -l
- List process IDs in addition to the normal information.
- -n
- Display information only about jobs that have changed status since the user was last notified of their status.
- -p
- List only the process ID of the job's process group leader.
- -r
- Display only running jobs.
- -s
- Display only stopped jobs.
- If jobspec is given, output is restricted to information about that job. The return status is 0 unless an invalid option is encountered or an invalid jobspec is supplied.
- If the -x option is supplied, jobs replaces any jobspec found in command or args with the corresponding process group ID, and executes command passing it args, returning its exit status.
- kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
- kill -l|-L [sigspec | exit_status]
- Send the signal named by sigspec or signum to the processes named by pid or jobspec. sigspec is either a case-insensitive signal name such as SIGKILL (with or without the SIG prefix) or a signal number; signum is a signal number. If sigspec is not present, then SIGTERM is assumed. An argument of -l lists the signal names. If any arguments are supplied when -l is given, the names of the signals corresponding to the arguments are listed, and the return status is 0. The exit_status argument to -l is a number specifying either a signal number or the exit status of a process terminated by a signal. The -L option is equivalent to -l. kill returns true if at least one signal was successfully sent, or false if an error occurs or an invalid option is encountered.
- let arg [arg ...]
- Each arg is an arithmetic expression to be evaluated (see ARITHMETIC EVALUATION above). If the last arg evaluates to 0, let returns 1; 0 is returned otherwise.
- local [option] [name[=value] ... | - ]
- For each argument, a local variable named name is created, and assigned value. The option can be any of the options accepted by declare. When local is used within a function, it causes the variable name to have a visible scope restricted to that function and its children. If name is -, the set of shell options is made local to the function in which local is invoked: shell options changed using the set builtin inside the function are restored to their original values when the function returns. The restore is effected as if a series of set commands were executed to restore the values that were in place before the function. With no operands, local writes a list of local variables to the standard output. It is an error to use local when not within a function. The return status is 0 unless local is used outside a function, an invalid name is supplied, or name is a readonly variable.
- logout
- Exit a login shell.
- mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
- readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
- Read lines from the standard input into the indexed array variable array, or from file descriptor fd if the -u option is supplied. The variable MAPFILE is the default array. Options, if supplied, have the following meanings:
- -d
- The first character of delim is used to terminate each input line, rather than newline. If delim is the empty string, mapfile will terminate a line when it reads a NUL character.
- -n
- Copy at most count lines. If count is 0, all lines are copied.
- -O
- Begin assigning to array at index origin. The default index is 0.
- -s
- Discard the first count lines read.
- -t
- Remove a trailing delim (default newline) from each line read.
- -u
- Read lines from file descriptor fd instead of the standard input.
- -C
- Evaluate callback each time quantum lines are read. The -c option specifies quantum.
- -c
- Specify the number of lines read between each call to callback.
- If -C is specified without -c, the default quantum is 5000. When callback is evaluated, it is supplied the index of the next array element to be assigned and the line to be assigned to that element as additional arguments. callback is evaluated after the line is read but before the array element is assigned.
- If not supplied with an explicit origin, mapfile will clear array before assigning to it.
- mapfile returns successfully unless an invalid option or option argument is supplied, array is invalid or unassignable, or if array is not an indexed array.
- popd [-n] [+n] [-n]
- Removes entries from the directory stack. With no arguments, removes the top directory from the stack, and performs a cd to the new top directory. Arguments, if supplied, have the following meanings:
- -n
- Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
- +n
- Removes the nth entry counting from the left of the list shown by dirs, starting with zero. For example: ``popd +0 removes the first directory, ``popd +1 the second.
- -n
- Removes the nth entry counting from the right of the list shown by dirs, starting with zero. For example: ``popd -0 removes the last directory, ``popd -1 the next to last.
- If the popd command is successful, a dirs is performed as well, and the return status is 0. popd returns false if an invalid option is encountered, the directory stack is empty, a non-existent directory stack entry is specified, or the directory change fails.
- printf [-v var] format [arguments]
- Write the formatted arguments to the standard output under the control of the format. The -v option causes the output to be assigned to the variable var rather than being printed to the standard output.
- The format is a character string which contains three types of objects: plain characters, which are simply copied to standard output, character escape sequences, which are converted and copied to the standard output, and format specifications, each of which causes printing of the next successive argument. In addition to the standard printf(1) format specifications, printf interprets the following extensions:
- %b
- causes printf to expand backslash escape sequences in the corresponding argument in the same way as echo -e.
- %q
- causes printf to output the corresponding argument in a format that can be reused as shell input.
- %(datefmt)T
- causes printf to output the date-time string resulting from using datefmt as a format string for strftime(3). The corresponding argument is an integer representing the number of seconds since the epoch. Two special argument values may be used: -1 represents the current time, and -2 represents the time the shell was invoked. If no argument is specified, conversion behaves as if -1 had been given. This is an exception to the usual printf behavior.
- The %b, %q, and %T directives all use the field width and precision arguments from the format specification and write that many bytes from (or use that wide a field for) the expanded argument, which usually contains more characters than the original.
Arguments to non-string format specifiers are treated as C constants, except that a leading plus or minus sign is allowed, and if the leading character is a single or double quote, the value is the ASCII value of the following character.
The format is reused as necessary to consume all of the arguments. If the format requires more arguments than are supplied, the extra format specifications behave as if a zero value or null string, as appropriate, had been supplied. The return value is zero on success, non-zero on failure.
- pushd [-n] [+n] [-n]
- pushd [-n] [dir]
- Adds a directory to the top of the directory stack, or rotates the stack, making the new top of the stack the current working directory. With no arguments, pushd exchanges the top two directories and returns 0, unless the directory stack is empty. Arguments, if supplied, have the following meanings:
- -n
- Suppresses the normal change of directory when rotating or adding directories to the stack, so that only the stack is manipulated.
- +n
- Rotates the stack so that the nth directory (counting from the left of the list shown by dirs, starting with zero) is at the top.
- -n
- Rotates the stack so that the nth directory (counting from the right of the list shown by dirs, starting with zero) is at the top.
- dir
- Adds dir to the directory stack at the top, making it the new current working di‐
rectory as if it had been supplied as the argument to the cd builtin.
- If the pushd command is successful, a dirs is performed as well. If the first form is used, pushd returns 0 unless the cd to dir fails. With the second form, pushd returns 0 unless the directory stack is empty, a non-existent directory stack element is specified, or the directory change to the specified new current directory fails.
- pwd [-LP]
- Print the absolute pathname of the current working directory. The pathname printed contains no symbolic links if the -P option is supplied or the -o physical option to the set builtin command is enabled. If the -L option is used, the pathname printed may contain symbolic links. The return status is 0 unless an error occurs while reading the name of the current directory or an invalid option is supplied.
- read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
- One line is read from the standard input, or from the file descriptor fd supplied as an argument to the -u option, split into words as described above under Word Splitting, and the first word is assigned to the first name, the second word to the second name, and so on. If there are more words than names, the remaining words and their intervening delimiters are assigned to the last name. If there are fewer words read from the input stream than names, the remaining names are assigned empty values. The characters in IFS are used to split the line into words using the same rules the shell uses for expansion (described above under Word Splitting). The backslash character (\) may be used to remove any special meaning for the next character read and for line continuation. Options, if supplied, have the following meanings:
- -a aname
- The words are assigned to sequential indices of the array variable aname, starting at 0. aname is unset before any new values are assigned. Other name arguments are ignored.
- -d delim
- The first character of delim is used to terminate the input line, rather than newline. If delim is the empty string, read will terminate a line when it reads a NUL character.
- -e
- If the standard input is coming from a terminal, readline (see READLINE above) is used to obtain the line. Readline uses the current (or default, if line editing was not previously active) editing settings, but uses Readline's default filename completion.
- -i text
- If readline is being used to read the line, text is placed into the editing buffer before editing begins.
- -n nchars
- read returns after reading nchars characters rather than waiting for a complete line of input, but honors a delimiter if fewer than nchars characters are read before the delimiter.
- -N nchars
- read returns after reading exactly nchars characters rather than waiting for a complete line of input, unless EOF is encountered or read times out. Delimiter characters encountered in the input are not treated specially and do not cause read to return until nchars characters are read. The result is not split on the characters in IFS; the intent is that the variable is assigned exactly the characters read (with the exception of backslash; see the -r option below).
- -p prompt
- Display prompt on standard error, without a trailing newline, before attempting to read any input. The prompt is displayed only if input is coming from a terminal.
- -r
- Backslash does not act as an escape character. The backslash is considered to be part of the line. In particular, a backslash-newline pair may not then be used as a line continuation.
- -s
- Silent mode. If input is coming from a terminal, characters are not echoed.
- -t timeout
- Cause read to time out and return failure if a complete line of input (or a specified number of characters) is not read within timeout seconds. timeout may be a decimal number with a fractional portion following the decimal point. This option is only effective if read is reading input from a terminal, pipe, or other special file; it has no effect when reading from regular files. If read times out, read saves any partial input read into the specified variable name. If timeout is 0, read returns immediately, without trying to read any data. The exit status is 0 if input is available on the specified file descriptor, non-zero otherwise. The exit status is greater than 128 if the timeout is exceeded.
- -u fd
- Read input from file descriptor fd.
- If no names are supplied, the line read, without the ending delimiter but otherwise unmodified, is assigned to the variable REPLY. The exit status is zero, unless end-of-file is encountered, read times out (in which case the status is greater than 128), a variable assignment error (such as assigning to a readonly variable) occurs, or an invalid file descriptor is supplied as the argument to -u.
- readonly [-aAf] [-p] [name[=word] ...]
- The given names are marked readonly; the values of these names may not be changed by subsequent assignment. If the -f option is supplied, the functions corresponding to the names are so marked. The -a option restricts the variables to indexed arrays; the -A option restricts the variables to associative arrays. If both options are supplied, -A takes precedence. If no name arguments are given, or if the -p option is supplied, a list of all readonly names is printed. The other options may be used to restrict the output to a subset of the set of readonly names. The -p option causes output to be displayed in a format that may be reused as input. If a variable name is followed by =word, the value of the variable is set to word. The return status is 0 unless an invalid option is encountered, one of the names is not a valid shell variable name, or -f is supplied with a name that is not a function.
- return [n]
- Causes a function to stop executing and return the value specified by n to its caller. If n is omitted, the return status is that of the last command executed in the function body. If return is executed by a trap handler, the last command used to determine the status is the last command executed before the trap handler. If return is executed during a DEBUG trap, the last command used to determine the status is the last command executed by the trap handler before return was invoked. If return is used outside a function, but during execution of a script by the . (source) command, it causes the shell to stop executing that script and return either n or the exit status of the last command executed within the script as the exit status of the script. If n is supplied, the return value is its least significant 8 bits. The return status is non-zero if return is supplied a non-numeric argument, or is used outside a function and not during execution of a script by . or source. Any command associated with the RETURN trap is executed before execution resumes after the function or script.
- set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
- set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
- Without options, the name and value of each shell variable are displayed in a format that can be reused as input for setting or resetting the currently-set variables. Read-only variables cannot be reset. In posix mode, only shell variables are listed. The output is sorted according to the current locale. When options are specified, they set or unset shell attributes. Any arguments remaining after option processing are treated as values for the positional parameters and are assigned, in order, to $1, $2, ... $n. Options, if specified, have the following meanings:
- -a
- Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands.
- -b
- Report the status of terminated background jobs immediately, rather than before the next primary prompt. This is effective only when job control is enabled.
- -e
- Exit immediately if a pipeline (which may consist of a single simple command), a list, or a compound command (see SHELL GRAMMAR above), exits with a non-zero status. The shell does not exit if the command that fails is part of the command list immediately following a while or until keyword, part of the test following the if or elif reserved words, part of any command executed in a && or || list except the command following the final && or ||, any command in a pipeline but the last, or if the command's return value is being inverted with !. If a compound command other than a subshell returns a non-zero status because a command failed while -e was being ignored, the shell does not exit. A trap on ERR, if set, is executed before the shell exits. This option applies to the shell environment and each subshell environment separately (see COMMAND EXECUTION ENVIRONMENT above), and may cause subshells to exit before executing all the commands in the subshell.
- If a compound command or shell function executes in a context where -e is being ignored, none of the commands executed within the compound command or function body will be affected by the -e setting, even if -e is set and a command returns a failure status. If a compound command or shell function sets -e while executing in a context where -e is ignored, that setting will not have any effect until the compound command or the command containing the function call completes.
- -f
- Disable pathname expansion.
- -h
- Remember the location of commands as they are looked up for execution. This is enabled by default.
- -k
- All arguments in the form of assignment statements are placed in the environment for a command, not just those that precede the command name.
- -m
- Monitor mode. Job control is enabled. This option is on by default for interactive shells on systems that support it (see JOB CONTROL above). All processes run in a separate process group. When a background job completes, the shell prints a line containing its exit status.
- -n
- Read commands but do not execute them. This may be used to check a shell script for syntax errors. This is ignored by interactive shells.
- -o option-name
- The option-name can be one of the following:
- allexport
- Same as -a.
- braceexpand
- Same as -B.
- emacs
- Use an emacs-style command line editing interface. This is enabled by de‐
- fault
- when the shell is interactive, unless the shell is started with the --noediting option. This also affects the editing interface used for read -e.
- errexit
- Same as -e.
- errtrace
- Same as -E.
- functrace
- Same as -T.
- hashall
- Same as -h.
- histexpand
- Same as -H.
- history
- Enable command history, as described above under HISTORY. This option is on by default in interactive shells.
- ignoreeof
- The effect is as if the shell command ``IGNOREEOF=10 had been executed (see Shell Variables above).
- keyword
- Same as -k.
- monitor
- Same as -m.
- noclobber
- Same as -C.
- noexec
- Same as -n.
- noglob
- Same as -f.
- nolog
- Currently ignored.
- notify
- Same as -b.
- nounset
- Same as -u.
- onecmd
- Same as -t.
- physical
- Same as -P.
- pipefail
- If set, the return value of a pipeline is the value of the last (right‐most) command to exit with a non-zero status, or zero if all commands in the pipeline exit successfully. This option is disabled by default.
- posix
- Change the behavior of bash where the default operation differs from the POSIX standard to match the standard (posix mode). See SEE ALSO below for a reference to a document that details how posix mode affects bash's behavior.
- privileged
- Same as -p.
- verbose
- Same as -v.
- vi
- Use a vi-style command line editing interface. This also affects the editing interface used for read -e.
- xtrace
- Same as -x.
- If -o is supplied with no option-name, the values of the current options are printed. If +o is supplied with no option-name, a series of set commands to recreate the current option settings is displayed on the standard output.
- -p
- Turn on privileged mode. In this mode, the $ENV and $BASH_ENV files are not processed, shell functions are not inherited from the environment, and the SHELLOPTS, BASHOPTS, CDPATH, and GLOBIGNORE variables, if they appear in the environment, are ignored. If the shell is started with the effective user (group) id not equal to the real user (group) id, and the -p option is not supplied, these actions are taken and the effective user id is set to the real user id. If the -p option is supplied at startup, the effective user id is not reset. Turning this option off causes the effective user and group ids to be set to the real user and group ids.
- -t
- Exit after reading and executing one command.
- -u
- Treat unset variables and parameters other than the special parameters "@" and "*" as an error when performing parameter expansion. If expansion is attempted on an unset variable or parameter, the shell prints an error message, and, if not interactive, exits with a non-zero status.
- -v
- Print shell input lines as they are read.
- -x
- After expanding each simple command, for command, case command, select command, or arithmetic for command, display the expanded value of PS4, followed by the command and its expanded arguments or associated word list.
- -B
- The shell performs brace expansion (see Brace Expansion above). This is on by default.
- -C
- If set, bash does not overwrite an existing file with the >, >&, and <> redirection operators. This may be overridden when creating output files by using the redirection operator >| instead of >.
- -E
- If set, any trap on ERR is inherited by shell functions, command substitutions, and commands executed in a subshell environment. The ERR trap is normally not inherited in such cases.
- -H
- Enable ! style history substitution. This option is on by default when the shell is interactive.
- -P
- If set, the shell does not resolve symbolic links when executing commands such as cd that change the current working directory. It uses the physical directory structure instead. By default, bash follows the logical chain of directories when performing commands which change the current directory.
- -T
- If set, any traps on DEBUG and RETURN are inherited by shell functions, command substitutions, and commands executed in a subshell environment. The DEBUG and RETURN traps are normally not inherited in such cases.
- --
- If no arguments follow this option, then the positional parameters are unset.Otherwise, the positional parameters are set to the args, even if some of them begin with a -.
- -
- Signal the end of options, cause all remaining args to be assigned to the positional parameters. The -x and -v options are turned off. If there are no args, the positional parameters remain unchanged.
- The options are off by default unless otherwise noted. Using + rather than - causes these options to be turned off. The options can also be specified as arguments to an invocation of the shell. The current set of options may be found in $-. The return status is always true unless an invalid option is encountered.
- shift [n]
- The positional parameters from n+1 ... are renamed to $1 .... Parameters represented by the numbers $# down to $#-n+1 are unset. n must be a non-negative number less than or equal to $#. If n is 0, no parameters are changed. If n is not given, it is assumed to be 1. If n is greater than $#, the positional parameters are not changed. The return status is greater than zero if n is greater than $# or less than zero; otherwise 0.
- shopt [-pqsu] [-o] [optname ...]
- Toggle the values of settings controlling optional shell behavior. The settings can be either those listed below, or, if the -o option is used, those available with the -o option to the set builtin command. With no options, or with the -p option, a list of all settable options is displayed, with an indication of whether or not each is set; if optnames are supplied, the output is restricted to those options. The -p option causes output to be displayed in a form that may be reused as input. Other options have the following meanings:
- -s
- Enable (set) each optname.
- -u
- Disable (unset) each optname.
- -q
- Suppresses normal output (quiet mode); the return status indicates whether the optname is set or unset. If multiple optname arguments are given with -q, the return status is zero if all optnames are enabled; non-zero otherwise.
- -o
- Restricts the values of optname to be those defined for the -o option to the set builtin.
- If either -s or -u is used with no optname arguments, shopt shows only those options which are set or unset, respectively. Unless otherwise noted, the shopt options are disabled (unset) by default.
- The return status when listing options is zero if all optnames are enabled, non-zero otherwise. When setting or unsetting options, the return status is zero unless an optname is not a valid shell option.
- ショップオプションのリストは以下の通り:
- assoc_expand_once
- 設定されている場合、シェルは、算術式評価中、変数代入を実行できるビルドイン実行中、および配列の再参照を実行するビルドイン実行中に、連想配列添え字の多重評価を抑制する。
- autocd
- 設定された場合、ディレクトリ名であるコマンド名は、あたかもcdコマンドの引数であるかのように実行される。 このオプションは対話型シェルでのみ使用される。
- cdable_vars
- 設定された場合、ディレクトリでないcd組み込みコマンドの引数は、変更先のディレクトリを値とする変数名とみなされる。
- cdspell
- 設定された場合、cdコマンドのディレクトリ構成要素のスペルにおける軽微なエラーが修正される。 チェックされる誤りは、文字が入れ替わっている、文字が欠けている、 1文字多い、などである。 修正が見つかった場合、修正されたファイル名が表示され、コマンドは続行される。 このオプションは対話型シェルでのみ使用される。
- checkhash
- セットされていると、bashはハッシュ・テーブルで見つかったコマンドを実行しようとする前に、そのコマンドが存在するかどうかをチェックする。 ハッシュ化されたコマンドがもはや存在しない場合は、通常のパス検索が実行される。
- checkjobs
- 設定されている場合、bashは対話型シェルを終了する前に、停止中および実行中のジョブのステータスを一覧表示する。 実行中のジョブがある場合、コマンドを介さずに2回目の終了を試みるまで終了が延期される(上記のJOB CONTROL を参照)。 停止中のジョブがある場合、シェルは常に終了を延期する。
- checkwinsize
- このオプションを設定すると、bashは外部(ビルトインでない)コマンドを実行するたびにウィンドウ・サイズをチェックし、必要に応じてLINESとCOLUMNSの値を更新する。 このオプションはデフォルトで有効になっている。
- cmdhist
- これを設定すると、bashは複数行コマンドのすべての行を同じ履歴エントリに保存しようとする。 これにより、複数行コマンドの再編集が容易になる。 このオプションはデフォルトで有効になっているが、上記の「HISTORY 」で説明したように、コマンドヒストリが有効になっている場合にのみ効果がある。
- compat31
- compat32
- compat40
- compat41
- compat42
- compat43
- compat44
- これらは、シェルの互換モードの側面を制御する(以下の「SHELL COMPATIBILITY MODE 」を参照)。
- complete_fullquote
- 設定されている場合、bashは補完を実行するときにファイル名とディレクトリ名に含まれるすべてのシェル・メタ文字を引用符で囲む。 設定されていない場合、補完されるファイル名のシェル変数参照にドル記号のようなメタキャラクタがあると、bashはそのメタキャラクタを引用符で囲む文字から除外する。つまり、ディレクトリに展開される変数名のドル記号は引用されないが、ファイル名に現れるドル記号も引用されない。 これは、bashがバックスラッシュを使って補完されたファイル名を引用している場合にのみ有効である。 この変数はデフォルトで設定されており、これは4.2までのバージョンにおけるbashのデフォルトの動作である。
- direxpand
- これを設定すると、bashはファイル名の補完を実行するときに、ディレクトリ名を単語展開の結果に置き換える。 これにより、readline編集バッファの内容が変更される。 設定されていない場合、bashはユーザーが入力した内容を保持しようとする。
- dirspell
- 設定すると、最初に与えられたディレクトリ名が存在しない場合、bashは単語補完時にディレクトリ名のスペル修正を試みる。
- dotglob
- .'で始まるファイル名をパス名の展開結果に含める。 ドットグロブがセットされていても、ファイル名 ``. と ``... は常に明示的にマッチさせる必要がある。
- execfail
- 設定された場合、非対話型シェルは、exec 組み込みコマンドの引数として指定されたファイルを実行できなくても終了しない。 対話型シェルは、exec に失敗しても終了しない。
- expand_aliases
- 設定されている場合、エイリアスは上記の ALIASES で説明されているように展開される。 このオプションは対話型シェルではデフォルトで有効になっている。
- extdebug
- シェル起動時、またはシェル起動ファイルに設定すると、 --debuggerオプションと同じように、シェル起動前にデバッガ・プロファイルを実行するようにアレンジする。 起動後に設定すると、デバッガが使用することを意図した動作が有効になる:
- 1. declareビルトインの-Fオプションは、引数として与えられた各関数名に対応するソースファイル名と行番号を表示する。
- 2. DEBUGトラップによって実行されたコマンドがゼロ以外の値を返した場合、次のコマンドはスキップされ実行されない。
- 3. DEBUGトラップによって実行されたコマンドが値2を返し、シェルがサブルーチン(シェル関数または.NETやソース・ビルトインによって実行されるシェル・スクリプト)で実行されている場合、シェルはreturnの呼び出しをシミュレートする。
- 4. BASH_ARGCとBASH_ARGVは、上記の説明に従って更新される。
- 5. コマンド置換、シェル関数、および ( コマンド ) で呼び出されるサブシェルは、DEBUG および RETURN トラップを継承する。
- 6. コマンド置換、シェル関数、および ( コマンド ) で呼び出されたサブシェルは、ERR トラップを継承する。
- extglob
- 設定すると、上記の「パス名の拡張」で説明した拡張パターンマッチング機能が有効になる。
- extquote
- 設定すると、${parameter}を二重引用符で囲んだ展開の中で、$'string'と$"string "の引用符付けが行われる。 このオプションはデフォルトで有効になっている。
- failglob
- 設定すると、パス名展開時にファイル名にマッチしないパターンは展開エラーとなる。
- force_fignore
- 設定されていると、FIGNOREシェル変数で指定された接尾辞は、単語補完を実行するときに、無視された単語が唯一の可能な補完であっても無視される。 FIGNOREについての説明は上記のSHELL VARIABLES を参照のこと。 このオプションはデフォルトで有効になっている。
- globasciiranges
- これを設定すると、パターンマッチングの括弧式で使用される範囲式(上記の Pattern Matching を参照)は、比較を実行するときに従来のCロケールのように 動作する。 つまり、現在のロケールの照合順序は考慮されないので、 bはAとBの間で照合されず、大文字と小文字のASCII文字は一緒に照合される。
- globstar
- 設定されている場合、パス名展開コンテキストで使われるパターン ** は、すべてのファイルと0個以上のディレクトリとサブディレクトリにマッチする。 パターンの後に/が続くと、ディレクトリとサブディレクトリにのみマッチする。
- gnu_errfmt
- 設定すると、シェルのエラーメッセージは標準のGNUエラーメッセージ形式で書かれる。
- histappend
- 設定された場合、シェルの終了時に、履歴リストはファイルを上書きするのではなく、HISTFILE変数の値で指定されたファイルに追加される。
- histreedit
- readlineが設定され、かつreadlineが使用されている場合、失敗した履歴の置換を再編集する機会がユーザーに与えられる。
- histverify
- セットされていてreadlineが使用されている場合、ヒストリ置換の結果はすぐにシェル・パーサーに渡されない。 その代わりに、結果の行がreadline編集バッファにロードされ、さらに修正できるようになる。
- hostcomplete
- readlineが使用されている場合、@を含む単語が補完されると、bashはホスト名の補完を試みる(上記のREADLINEでの補完を参照)。 これはデフォルトで有効になっている。
- huponexit
- 設定すると、対話型ログイン・シェルが終了したときに、bashはすべてのジョブにSIGHUPを送信する。
- inherit_errexit
- このオプションを設定すると、サブシェル環境でerrexitオプショ ンを設定解除する代わりに、コマンド置換がerrexitオプションの値を継承する。 このオプションは、posixモードが有効な場合に有効になる。
- interactive_comments
- このオプションが設定されている場合、#で始まる単語を許可すると、その単語とその行の残りのすべての文字が対話型シェルで無視される(上記のCOMMENTS を参照)。このオプションはデフォルトで有効になっている。
- lastpipe
- 設定され、ジョブ制御がアクティブでない場合、シェルは、現在のシェル環境でバックグラウンドで実行されていないパイプラインの最後のコマンドを実行する。
- lithist
- cmdhist オプションが有効な場合、複数行のコマンドは可能な限りセミコロン区切りではなく、改行を埋め込んで履歴に保存される。
- localvar_inherit
- 設定されている場合、ローカル変数は、新しい値が代入される前に、前のスコープに存在する同名の変数の値と属性を継承する。 nameref属性は継承されない。
- localvar_unset
- セットされている場合、以前の関数スコープにあるローカル変数に対してunsetを呼び出すと、その関数が返されるまでの間、後続のルックアップでunsetが見つかるようにマークされる。これは、現在の関数スコープでローカル変数をアンセットしたときの動作と同じである。
- login_shell
- シェルは、ログイン・シェルとして起動する場合、このオプションを設定する(上記のINVOCATION を参照)。 この値は変更できない。
- mailwarn
- もしセットされていて、bashがメールをチェックしているファイルが前回チェックしたときからアクセスされていた場合、``The mailfile has been readというメッセージが表示される。
- no_empty_cmd_completion
- readlineが使用されている場合、空の行で補完を試みても、PATHを検索して補完を試みることはない。
- nocaseglob
- 設定すると、bashはパス名展開(上記のPathname Expansion を参照)の際に、大文字と小文字を区別せずにファイル名をマッチングする。
- nocasematch
- 設定されていると、bashは大文字小文字を区別せずにパターンをマッチングする。大文字小文字や[[ 条件付きコマンドの実行中にマッチングを行う場合、パターン置換の単語展開を行う場合、プログラム可能な補完の一部として可能な補完をフィルタリングする場合などである。
- nullglob
- これを設定すると、bashはマッチするファイルがないパターン(上記のPathname Expansion を参照)を、それ自身ではなくNULL文字列に展開することができる。
- progcomp
- 設定されている場合、プログラマブル補完機能(上記のProgrammable Completion を参照)が有効になる。 このオプションはデフォルトで有効になっている。
- progcomp_alias
- 設定され、プログラム可能な補完が有効になっている場合、bashは補完を持たないコマンド名をエイリアスの可能性があるものとして扱い、エイリアスの展開を試みる。エイリアスを持っている場合、bashは展開されたエイリアスの結果のコマンドワードを使用してプログラマブル補完を試みる。
- promptvars
- 設定されている場合、プロンプト文字列は、上記のPROMPTINGで説明されているように 展開された後に、パラメータ展開、コマンド置換、算術展開、引用符除去を受ける。 このオプションはデフォルトで有効になっている。
- restricted_shell
- シェルが制限付きモードで起動した場合、このオプションが設定される(下記のRESTRICTED SHELL を参照)。 この値は変更できない。 これは起動ファイルが実行されてもリセットされないので、起動ファイルはシェルが制限されているかどうかを発見することができる。
- shift_verbose
- 設定されている場合、シフトカウントが位置パラメーターの数を超えると、shift 組み込み関数はエラーメッセージを表示する。
- sourcepath
- このオプションを設定すると、source (.) 組み込み関数が PATH の値を使用して、 引数として指定されたファイルを含むディレクトリを検索する。 このオプションはデフォルトで有効になっている。
- xpg_echo
- 設定すると、echo組み込み関数はデフォルトでバックスラッシュ・エスケープ・シーケンスを展開する。
- suspend [-f]
- SIGCONT シグナルを受け取るまで、このシェルの実行を一時停止する。 ログインシェルはサスペンドできない。-f オプションを使用すると、これを上書きして強制的にサスペンドできる。シェルがログイン・シェルで -f が指定されていない場合、またはジョブ制御が有効になっていない場合、戻り値は 0 である。
- test expr
- [ expr ]
- 条件式exprの評価に応じて、0(真)または1(偽)のステータスを返す。 各演算子とオペランドは別々の引数でなければならない。 testはいかなるオプションも受け付けないし、オプションの終了を意味する--という引数も受け付けず無視する。
- 式は以下の演算子を使って組み合わせることができる。 評価は引数の数に依存する。 演算子の優先順位は、引数が5つ以上ある場合に使用される。
- ! expr
- exprがfalseなら真。
- ( expr )
- expr の値を返す。 これは、演算子の通常の優先順位を上書きするために使われる。
- expr1 -a expr2
- expr1とexpr2の両方が真なら真である。
- expr1 -o expr2
- expr1 または expr2 のどちらかが真なら真。
- testと[ は、引数の数に基づく一連のルールを使って条件式を評価する。
- 0 arguments
- この表現は偽である。
- 1 argument
- この式は、引数がNULLでない場合にのみ真となる。
- 2 arguments
- 最初の引数が! の場合、式は2番目の引数がNULLの場合のみ真となる。 最初の引数が、上記の「条件式」に列挙された単項条件演算子のいずれかである場合、単項テストが真であれば式は真となる。 最初の引数が有効な単項条件演算子でない場合、式は偽となる。
- 3 arguments
- 以下の条件は、列挙された順序で適用される。 第2引数が、上記の「条件式」の項に列挙された二項条件演算子の1つである場合、式の結果は、第1引数と第3引数をオペランドとして使用した二項検定の結果となる。 a演算子と-o演算子は、3つの引数がある場合、二項演算子とみなされる。 第1引数が! の場合、値は、第2引数と第3引数を使った2引数テストの否定となる。 第1引数が正確に(かつ第3引数が正確に)である場合、結果は第2引数の1引数テストとなる。 そうでない場合、式は偽となる。
- 4 arguments
- 最初の引数が!の場合、結果は残りの引数で構成される3つの引数式の否定となる。 そうでない場合、式はパースされ、上に挙げたルールを使って優先順位に従って評価される。
- 5 or more arguments
- 式はパースされ、上記の規則を用いて優先順位に従って評価される。
- 演算子 < と > は、test または [ と一緒に使われると、ASCIIの順序で辞書順にソートされる。
- times
- シェルおよびシェルから実行されたプロセスの累積ユーザー時間および累積システム時間を表示する。 戻り値は 0 である。
- trap [-lp] [[arg] sigspec ...]
- コマンド arg は、シェルがシグナル sigspec を受け取ったときに読み込まれ、実行される。 arg が存在しない場合 (sigspec が1つの場合) または - の場合、指定された各シグナルは元の値 (シェルに入ったときの値) にリセットされる。 arg が NULL 文字列の場合、各 sigspec で指定されたシグナルは、シェルおよびシェルが呼び出すコマンドによって無視される。 arg が存在せず、-p が供給された場合、各 sigspec に関連付けられたトラップコマンドが表示される。 引数がない場合、または -p だけが与えられた場合、 trap は各シグナルに関連付けられたコマンドのリストを表示する。 lオプションを指定すると、シェルはシグナル名とそれに対応する番号のリストを表示する。 各sigspecは、<signal.h>で定義されているシグナル名かシグナル番号である。 シグナル名は大文字と小文字を区別せず、接頭辞 SIG はオプションである。
- sigspecがEXIT(0)の場合、コマンドargはシェルからの終了時に実行される。 sigspecがDEBUGの場合、コマンドargは、単純コマンド、forコマンド、caseコマンド、selectコマンド、すべての算術forコマンド、およびシェル関数内で最初のコマンドが実行される前に実行される(上記のSHELL GRAMMAR を参照)。 DEBUGトラップに対する効果の詳細については、shopt組み込みのextdebugオプションの説明を参照のこと。 sigspec が RETURN の場合、.source または source 組み込み関数で実行されたシェル関数またはスクリプトが実行を終了するたびに、コマンド arg が実行される。
- sigspecがERRの場合、パイプライン(単一の単純なコマンドで構成されることもある)、リスト、または複合コマンドが、以下の条件に従って、ゼロ以外の終了ステータスを返すたびに、コマンドargが実行される。 ERR トラップは、失敗したコマンドが while または until キーワードの直後のコマンドリストの一部である場合、if 文のテストの一部である場合、最後の && または || に続くコマンド以外の && または || リストで実行されるコマンドの一部である場合、パイプラインの最後のコマンド以外のコマンドである場合、コマンドの戻り値が ! これらは、errexit (-e)オプションが従う条件と同じである。
- シェルに入ったときに無視されたシグナルは、トラップもリセットもできない。 無視されないトラップされたシグナルは、サブシェルまたはサブシェル環境が作成されると、元の値にリセットされる。 sigspecが無効な場合、戻りステータスはfalseになり、そうでなければtrapはtrueを返す。
- type [-aftpP] name [name ...]
- オプションがない場合は、それぞれの名前がコマンド名として使われた場合にどのように解釈されるかを示す。tオプションが使われると、typeは、nameがエイリアス、シェル予約語、関数、組み込み関数、ディスクファイルの場合、それぞれエイリアス、キーワード、関数、組み込み関数、ディスクファイルのいずれかの文字列を表示する。 名前が見つからない場合は何も表示されず、終了ステータスにfalseが返される。 -pオプションが使われた場合、typeはnameがコマンド名として指定された場合 に実行されるディスクファイルの名前を返すか、``type -t nameがfileを返さない場合は何も返さない。 -P オプションをつけると、``type -t name が file を返さない場合でも、それぞれの名前に対して PATH を検索する。 コマンドがハッシュ化されている場合、-p と -P はハッシュ化された値を表示するが、必ずしも PATH で最初に表示されるファイルとは限らない。 -aオプションが使われると、nameという名前の実行ファイルを含むすべての場所を表示する。 これには、-pオプションも使用されていない場合に限り、エイリアスや関数も含まれる。 aを使用する場合、ハッシュ化されたコマンドのテーブルは参照されない。 fオプションは、コマンド組み込み関数と同様にシェル関数の検索を抑制する。 typeは、すべての引数が見つかった場合はtrueを返し、見つからなかった場合はfalseを返す。
- ulimit [-HS] -a
- ulimit [-HS] [-bcdefiklmnpqrstuvxPRT [limit]]
- シェルやシェルによって起動されるプロセスが利用可能なリソースを制御する。-Hおよび-Sオプションは、指定されたリソースに対してハードリミットまたはソフトリミットを設定することを指定する。 ハードリミットは、一度設定されると非 root ユーザーが増やすことはできない。 Hも-Sも指定しない場合、ソフトリミットとハードリミットの両方が設定される。 limitの値には、リソースに指定された単位の数値を指定するか、特別な値hard、soft、unlimitedのいずれかを指定する。hardは現在のハードリミット、softは現在のソフトリミット、unlimitedはリミットなしをそれぞれ表す。 limitが省略された場合は、-Hオプションが与えられていない限り、リソースのソフトリミットの現在値が表示される。 複数のリソースを指定した場合は、値の前にリミット名と単位 (適切な場合) が表示される。 その他のオプションは、以下のように解釈される:
- -a
- すべての電流制限を報告する。
- -b
- ソケットバッファの最大サイズ
- -c
- 作成されるコアファイルの最大サイズ
- -d
プロセスのデータセグメントの最大サイズである。
- -e
スケジューリング優先度の最大値("nice")。
- -f
シェルとその子プロセスが書き込むファイルの最大サイズである。
- -i
- pending シグナルの最大数
- -k
- 割り当て可能なkキューの最大数
- -l
- メモリにロックできる最大サイズ
- -m
- 常駐セットの最大サイズ(多くのシステムはこの制限を守らない)
- -n
- 開いているファイル記述子の最大数(多くのシステムはこの値の設定を許可しない)
- -p
- 512バイトブロック単位のパイプサイズ(この値は設定できない場合がある)
- -q
- POSIXメッセージ・キューの最大バイト数
- -r
- リアルタイム・スケジューリングの最大優先度
- -s
- 最大スタックサイズ
- -t
- 最大CPU時間(秒)
- -u
- 1ユーザーが利用可能な最大プロセス数
- -v
- シェルと、システムによってはその子シェルが利用可能な仮想メモリの最大量
- -x
- ファイルロックの最大数
- -P
- 疑似端末の最大数
- -R
- リアルタイムプロセスがブロックされるまでに実行できる最大時間(マイクロ秒単位
- -T
- スレッドの最大数
- limitが与えられ、-aオプションが使われていない場合、 limitは指定されたリソースの新しい値になる。 オプションが与えられていない場合は、-fが仮定される。 ただし、-tは秒単位、-Rはマイクロ秒単位、-pは512バイトブロック単位、 -P、-T、-b、-k、-n、-uはスケールなし、 posixモードでは-cと-fは512バイト単位である。 無効なオプションや引数が与えられるか、新しいリミット値の設定中にエラーが発生しない限り、戻り値は0である。
- umask [-p] [-S] [mode]
- ユーザーファイル作成マスクは mode に設定される。 mode が数字で始まる場合は、8進数として解釈される。そうでない場合は、 chmod(1) が受け付けるものと同様のシンボリック・モード・マスクとして解釈される。 modeが省略された場合、マスクの現在の値が表示される。-Sオプションを指定すると、マスクが記号形式で表示される。 -pオプションが与えられ、modeが省略された場合、入力として再利用可能な形式で出力される。 戻りステータスは、モードの変更に成功した場合、または mode 引数が与えられなかった場合は 0 であり、そうでない場合は false である。
- unalias [-a] [name ...]
- 定義されているエイリアスのリストからそれぞれの名前を削除する。 -aを指定すると、すべてのエイリアス定義が削除される。 与えられた名前が定義されたエイリアスでない限り、戻り値は真である。
- unset [-fv] [-n] [name ...]
- それぞれの名前に対して、対応する変数または関数を削除する。 -vオプションが指定された場合、各名前はシェル変数を参照し、その変数が削除される。 読み取り専用の変数は設定解除できない。-f を指定すると、各名称はシェル関数を指し、その関数定義が削除される。-n オプションが指定され、name が nameref 属性を持つ変数である場合、name は参照先の変数ではなくアンセットされる。 -nオプションは、-fオプションが与えられている場合には何の効果もない。 その名前の変数がない場合、その名前の関数があればアンセットされる。 アンセットされた変数や関数は、後続のコマンドに渡される環境から取り除かれる。 BASH_ALIASES、BASH_ARGV0、BASH_CMDS、BASH_COMMAND、BASH_SUBSHELL、BASHPID、COMP_WORDBREAKS、DIRSTACK、EPOCHREALTIME、EPOCHSECONDS、FUNCNAME、GROUPS、HISTCMD、LINENO、RANDOM、SECONDS、SRANDOMのどれかがアンセットされると、たとえその後にリセットされたとしても、特別なプロパティは失われる。 名前が読み取り専用でない限り、終了ステータスは真である。
- wait [-fn] [-p varname] [id ...]
- 指定された各子プロセスを待ち、その終了ステータスを返す。 各idは、プロセスIDまたはジョブ指定である。ジョブ指定が与えられた場合、 そのジョブのパイプラインにある全てのプロセスが待たれる。 idが与えられない場合、waitは実行中のすべてのバックグラウンド・ジョブと、 最後に実行されたプロセス置換(そのプロセスidが$! -nオプションが与えられた場合、waitはidのリストから1つのジョブ、またはidが与えられない場合は任意のジョブの完了を待ち、その終了ステータスを返す。与えられた引数のどれもがシェルの子でない場合、または引数が与えられず、シェルに待機していない子がない場合、終了ステータスは127である。 -p オプションが与えられると、終了ステータスが返されたジョブのプロセスまたはジョブ識別子が、 オプション引数で指定された変数 varname に代入される。 この変数は、代入の前に初期状態では設定されていない。 これは、-n オプションが指定されている場合にのみ有効である。 ジョブ制御が有効になっているときに -f オプションを指定すると、id がステータスを変更したときに返すのではなく、id が終了するのを待ってからステータスを返すようになる。 idが存在しないプロセスまたはジョブを指定した場合、返されるステータスは127である。 それ以外の場合は、最後に待機したプロセスまたはジョブの終了ステータスが返される。
SHELL COMPATIBILITY MODE
Bash-4.0 introduced the concept of a `shell compatibility level', specified as a set of options to the shopt builtin compat31, compat32, compat40, compat41, and so on). There is only one current compatibility level -- each option is mutually exclusive. The compatibility level is intended to allow users to select behavior from previous versions that is incompatible with newer versions while they migrate scripts to use current features and behavior. It's intended to be a temporary solution.
This section does not mention behavior that is standard for a particular version (e.g., setting compat32 means that quoting the rhs of the regexp matching operator quotes special regexp characters in the word, which is default behavior in bash-3.2 and above).
If a user enables, say, compat32, it may affect the behavior of other compatibility levels up to and including the current compatibility level. The idea is that each compatibility level controls behavior that changed in that version of bash, but that behavior may have been present in earlier versions. For instance, the change to use locale-based comparisons with the [[ command came in bash-4.1, and earlier versions used ASCII-based comparisons, so enabling compat32 will enable ASCII-based comparisons as well. That granularity may not be sufficient for all uses, and as a result users should employ compatibility levels carefully. Read the documentation for a particular feature to find out the current behavior.
Bash-4.3 introduced a new shell variable: BASH_COMPAT. The value assigned to this variable (a decimal version number like 4.2, or an integer corresponding to the compatNN option, like 42) determines the compatibility level.
Starting with bash-4.4, Bash has begun deprecating older compatibility levels. Eventually, the options will be removed in favor of BASH_COMPAT.
Bash-5.0 is the final version for which there will be an individual shopt option for the previous version. Users should use BASH_COMPAT on bash-5.0 and later versions.
The following table describes the behavior changes controlled by each compatibility level setting. The compatNN tag is used as shorthand for setting the compatibility level to NN using one of the following mechanisms. For versions prior to bash-5.0, the compatibility level may be set using the corresponding compatNN shopt option. For bash-4.3 and later versions, the BASH_COMPAT variable is preferred, and it is required for bash-5.1 and later versions.
- compat31
- quoting the rhs of the [[ command's regexp matching operator (=~) has no special effect
- compat32
- interrupting a command list such as "a ; b ; c" causes the execution of the next command in the list (in bash-4.0 and later versions, the shell acts as if it received the interrupt, so interrupting one command in a list aborts the execution of the entire list)
- compat40
- the < and > operators to the [[ command do not consider the current locale when comparing strings; they use ASCII ordering. Bash versions prior to bash-4.1 use ASCII collation and strcmp(3); bash-4.1 and later use the current locale's collation sequence and strcoll(3).
- compat41
- in posix mode, time may be followed by options and still be recognized as a reserved word (this is POSIX interpretation 267)
- in posix mode, the parser requires that an even number of single quotes occur in the word portion of a double-quoted parameter expansion and treats them specially, so that characters within the single quotes are considered quoted (this is POSIX interpretation 221)
- compat42
- the replacement string in double-quoted pattern substitution does not undergo quote removal, as it does in versions after bash-4.2
- in posix mode, single quotes are considered special when expanding the word portion of a double-quoted parameter expansion and can be used to quote a closing brace or other special character (this is part of POSIX interpretation 221); in later versions, single quotes are not special within double-quoted word expansions
- compat43
- the shell does not print a warning message if an attempt is made to use a quoted compound assignment as an argument to declare (declare -a foo='(1 2)'). Later versions warn that this usage is deprecated
- word expansion errors are considered non-fatal errors that cause the current command to fail, even in posix mode (the default behavior is to make them fatal errors that cause the shell to exit)
- when executing a shell function, the loop state (while/until/etc.) is not reset, so break or continue in that function will break or continue loops in the calling context. Bash-4.4 and later reset the loop state to prevent this
- compat44
- the shell sets up the values used by BASH_ARGV and BASH_ARGC so they can expand to the shell's positional parameters even if extended debugging mode is not enabled
- a subshell inherits loops from its parent context, so break or continue will cause the subshell to exit. Bash-5.0 and later reset the loop state to prevent the exit
- variable assignments preceding builtins like export and readonly that set attributes continue to affect variables with the same name in the calling environment even if the shell is not in posix mode
- compat50
- Bash-5.1 changed the way $RANDOM is generated to introduce slightly more randomness. If the shell compatibility level is set to 50 or lower, it reverts to the method from bash-5.0 and previous versions, so seeding the random number generator by assigning a value to RANDOM will produce the same sequence as in bash-5.0
- If the command hash table is empty, bash versions prior to bash-5.1 printed an informational message to that effect, even when producing output that can be reused as input. Bash-5.1 suppresses that message when the -l option is supplied.
RESTRICTED SHELL
bashをrbashという名前で起動するか、起動時に-rオプションを指定すると、シェルは制限付きになる。 制限付きシェルは、標準シェルよりも制御された環境を設定するために使用される。 動作はbashと同じだが、例外として以下のことが禁止または実行されない:
- cdでディレクトリを変更する
- SHELL、PATH、HISTFILE、ENV、BASH_ENVの値を設定または解除する。
- / を含むコマンド名を指定する。
- .builtinコマンドの引数として、/を含むファイル名を指定する。
- スラッシュを含むファイル名をhistory組み込みコマンドの引数として指定する。
- hash組み込みコマンドの-pオプションの引数として、スラッシュを含むファイル名を指定する。
- 起動時にシェル環境から関数定義をインポートする。
- 起動時にシェル環境からSHELLOPTSの値を解析する。
- リダイレクト演算子 >, >|, <>, >&, &>, >> を使って出力をリダイレクトする。
- exec組み込みコマンドを使用して、シェルを別のコマンドに置き換える。
- enable 組み込みコマンドに -f および -d オプションをつけて、組み込みコマンドを追加または削除する。
- enable builtinコマンドを使用して、無効になっているシェル組み込みコマンドを有効にする。
- command組み込みコマンドに-pオプションを指定する。
- set +r または set +o restricted で制限モードをオフにする。
これらの制限は、起動ファイルが読み込まれた後に実行される。
シェルスクリプトであることが判明したコマンドが実行されると(上記のCOMMAND EXECUTION を参照)、rbashはスクリプトを実行するために生成されたシェルの制限をすべてオフにする。
SEE ALSO
- Bash Reference Manual, Brian Fox and Chet Ramey
- The Gnu Readline Library, Brian Fox and Chet Ramey
- The Gnu History Library, Brian Fox and Chet Ramey
- Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE --
- http://pubs.opengroup.org/onlinepubs/9699919799/
- http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
FILES
- /bin/bash
- bash実行ファイル
- /etc/profile
- ログインシェルで実行されるシステム全体の初期化ファイル。
- /etc/bash.bashrc
- システム全体の対話型シェルごとの起動ファイル
- /etc/bash.bash.logout
- ログインシェルが終了するときに実行される、システム全体のログインシェルのクリーンアップファイル
- ~/.bash_profile
- ログインシェルで実行される個人用初期化ファイル。
- ~/.bashrc
- 対話型シェルごとの起動ファイル
- ~/.bash_logout
- ログインシェルが終了するときに実行される、個々のログインシェルのクリーンアップファイル
- ~/.inputrc
- 個々のreadline初期化ファイル
AUTHORS
Brian Fox, Free Software Foundation
- bfox@gnu.org
Chet Ramey, Case Western Reserve University
- chet.ramey@case.edu
BUG REPORTS
bashでバグを見つけたら、報告すべきだ。 しかしその前に、それが本当にバグなのか、最新版のbashにバグがあるのかを確認する必要がある。 最新バージョンはいつでもftp://ftp.gnu.org/pub/gnu/bash/にある。
バグが実際に存在すると判断したら、bashbugコマンドを使ってバグレポートを提出しよう。 もし修正方法があれば、それもメールすることが推奨される! 提案や`哲学的な'バグ報告は bug-bash@gnu.org に送信するか、Usenet ニュースグループ gnu.bash.bug に投稿してほしい。
すべてのバグリポートは以下を含めるべきである:
- The version number of bash
- The hardware and operating system
- The compiler used to compile
- A description of the bug behaviour
- A short script or `recipe' which exercises the bug
bashbugは最初の3つの項目をバグ報告用のテンプレートに自動的に挿入する。
このマニュアルページに関するコメントやバグ報告は、chet.ramey@case.eduへ
BUGS
大きすぎるし、遅すぎる。
bashと従来のバージョンのshには微妙な違いがあるが、そのほとんどはPOSIX仕様のためだ。
エイリアスは、使い方によっては混乱を招く。
シェル組み込みのコマンドや関数は、停止/再起動ができない。
複合コマンドや`a ; b ; c'形式のコマンドシーケンスは、プロセス停止時に 優雅に扱われない。 プロセスが停止されると、シェルは直ちに次のコマンドを実行する。 一連のコマンドを括弧で囲んでサブシェルに強制的に入れれば十分であり、サブシェルはユニットとして停止することができる。
配列変数は(まだ)エクスポートできない。
一度にアクティブなコプロセスは1つだけである。
External link
この記事は、Debianのmanpageの項目を翻訳一部改変しております。 |