/usr/bin/bash: Difference between revisions

From Azupedia
Jump to navigation Jump to search
Line 1,646: Line 1,646:
=== Killing and Yanking ===
=== Killing and Yanking ===
;kill-line (C-k)
;kill-line (C-k)
:Kill the text from point to the end of the line.
:pointから行末までのテキストをキルする。
;backward-kill-line (C-x Rubout)
;backward-kill-line (C-x Rubout)
:Kill backward to the beginning of the line.
:ラインの先頭までキルバックする。
;unix-line-discard (C-u)
;unix-line-discard (C-u)
:Kill backward from point to the beginning of the line.  The killed text is  saved  on  the kill-ring.
:pointから行頭まで後方にキルする。 キルされたテキストはキルリングに保存される。
;kill-whole-line
;kill-whole-line
:Kill all characters on the current line, no matter where point is.
:現在行のすべての文字を、ポイントがどこであろうと殺す。
;kill-word (M-d)
;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.
:pointから現在の単語の終わりまで、または単語と単語の間の場合は次の単語の終わりまでをキルする。 単語の境界はforward-wordで使われるものと同じである。
;backward-kill-word (M-Rubout)
;backward-kill-word (M-Rubout)
:Kill the word behind point.  Word boundaries are the same as those used by backward-word.
:後ろの単語を殺す。 単語の境界線はbackward-wordで使われるものと同じである。
;shell-kill-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.
:pointから現在の単語の終わりまで、または単語と単語の間の場合は次の単語の終わりまでをキルする。 単語の境界は、shell-forward-wordで使われるものと同じである。
;shell-backward-kill-word
;shell-backward-kill-word
:Kill  the  word  behind  point.  Word boundaries are the same as those used by shell-backward-word.
:pointの後ろの単語を消す。 単語の境界はshell-backward-wordで使われるものと同じである。
;unix-word-rubout (C-w)
;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.
:空白を単語の境界として、pointの後ろの単語を殺す。 キルされたテキストはキルリングに保存される。
;unix-filename-rubout
;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.
:空白文字とスラッシュ文字を単語の境界として、pointの後ろの単語を消す。 キルされたテキストはキルリングに保存される。
;delete-horizontal-space (M-\)
;delete-horizontal-space (M-\)
:Delete all spaces and tabs around point.
:pointの周りのスペースとタブをすべて削除する。
;kill-region
;kill-region
:Kill the text in the current region.
:現在の領域のテキストを消す。
;copy-region-as-kill
;copy-region-as-kill
:Copy the text in the region to the kill buffer.
:領域内のテキストをキルバッファにコピーする。
;copy-backward-word
;copy-backward-word
:Copy the word before point to the kill buffer.  The word boundaries are the same as  backward-word.
:point前のワードをキルバッファにコピーする。 ワード境界はバックワードワードと同じである。
;copy-forward-word
;copy-forward-word
:Copy  the  word  following  point to the kill buffer.  The word boundaries are the same as forward-word.
:ワードに続く点をキルバッファにコピーする。 ワード境界はforward-wordと同じである。
;yank (C-y)
;yank (C-y)
:Yank the top of the kill ring into the buffer at point.
:キリング上部をバッファーの中に引き込む。
;yank-pop (M-y)
;yank-pop (M-y)
:Rotate the kill ring, and yank the new top.  Only works following yank or yank-pop.
:キルリングを回転させ、新しいトップをヤンクする。 ヤンクまたはヤンクポップに続いてのみ機能する。


=== Numeric Arguments ===
=== Numeric Arguments ===

Revision as of 14:57, 12 October 2023

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_MESSAGESTEXTDOMAINシェル変数を使用して、メッセージカタログの検索と翻訳を実行する。 現在のロケールが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_LINENOBASH_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 を受け取ったときに自動的に設定される。
MAIL
このパラメータにファイル名またはディレクトリ名が設定され、MAILPATH変数が設定されていない場合、bashは指定されたファイルまたはMaildir形式のディレクトリにメールが到着したことをユーザーに通知する。
MAILCHECK
bashがメールをチェックする頻度(秒)を指定する。 デフォルトは60秒である。 メールをチェックする時間になると、シェルはプライマリ・プロンプトを表示する前にチェックする。 この変数が設定されていないか、0以上の値でない場合、シェルはメールチェックを無効にする。
MAILPATH
コロンで区切られた、メールをチェックするファイル名のリスト。 特定のファイルにメールが到着したときに表示されるメッセージは、 ファイル名とメッセージを `?' で区切って指定することができる。 メッセージのテキストで使われた場合、$_は現在のメールファイル名に展開される。 例:
MAILPATH='/var/mail/bfox? "You have mail":~/shell-mail?"$_ has mail!"'
Bash はこの変数にデフォルト値を与えるように設定することができる(デフォルトでは値はない)が、使用するユーザーメールファイルの場所はシステムに依存する(例えば、/var/mail/$USER)。
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のチルダに続く文字が、先頭に `+' または `-' を含まない数字で構成されている場合、 `+' が仮定される。

ログイン名が無効であるか、チルダ展開に失敗した場合、その単語は変更されない。

各変数の代入では、:または最初の=の直後に引用符で囲まれていないチルダ接頭辞があるかどうかがチェックされる。 その結果、PATHMAILPATHCDPATHへの代入でチルダ付きのファイル名を使用することができ、シェルは展開された値を代入する。

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

単純なコマンドが実行されると、シェルは以下の展開、代入、リダイレクションを左から順に実行する。

  1. パーサーが変数代入としてマークした単語(コマンド名の前にあるもの)とリダイレクションは、後の処理のために保存される。
  2. 変数代入やリダイレクションでない単語は展開される。 展開後も単語が残っている場合、最初の単語はコマンド名とみなされ、それ以降の単語は引数となる。
  3. リダイレクションは上記のREDIRECTION の説明に従って実行される。
  4. 各変数代入の=の後のテキストは、変数に代入される前に、チルダ展開、パラメータ展開、コマンド置換、算術展開、引用符除去を受ける。

コマンド名の結果がない場合、変数への代入は現在のシェル環境に影響する。 そうでなければ、変数は実行されたコマンドの環境に追加され、現在のシェル環境には影響しない。 代入のいずれかが読み取り専用変数に値を代入しようとした場合、エラーが発生し、コマンドは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 は SIGTTINSIGTTOUSIGTSTP を無視する。

bashが実行する非ビルティン・コマンドのシグナル・ハンドラは、シェルが親から継承した値に設定される。 ジョブ制御が有効でない場合、非同期コマンドは、これらの継承されたハンドラに加え、SIGINTSIGQUITも無視する。 コマンド置換の結果として実行されるコマンドは、キーボードから生成されるジョブ制御シグナルSIGTTINSIGTTOUSIGTSTPを無視する。

シェルはデフォルトでは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が有効な場合はターミナルへの書き込み)を試みるバックグラウンド・プロセスは、カーネルのターミナル・ドライバによってSIGTTINSIGTTOU)シグナルが送られ、キャッチされない限り、プロセスは一時停止される。

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)
カーソルがどこにあっても、その行を受け入れる。 この行が空行でない場合は、HISTCONTROL変数の状態に従って履歴リストに追加する。 その行が変更された履歴行であれば、履歴行を元の状態に戻す。
previous-history (C-p)
履歴リストから前のコマンドを取得し、リスト内に戻る。
next-history (C-n)
履歴リストから次のコマンドを取得し、リストを進める。
beginning-of-history (M-<)
履歴の最初の行に移動する。
end-of-history (M->)
入力履歴の最後、つまり現在入力中の行に移動する。
reverse-search-history (C-r)
現在の行から後方へ検索し、必要に応じて履歴を「上」へ移動する。 This is an incremental search.
forward-search-history (C-s)
現在の行から前方へ検索を開始し、必要に応じて履歴を`下へ'移動する。 これはインクリメンタルサーチである。
non-incremental-reverse-search-history (M-p)
ユーザーが指定した文字列を非インクリメンタルサーチで検索し、現在の行から始まる履歴を後方へ検索する。
non-incremental-forward-search-history (M-n)
ユーザーが指定した文字列を非インクリメンタル検索で履歴から前方に検索する。
history-search-forward
現在の行の先頭からポイントまでの文字列を履歴から前方に検索する。 これは非インクリメンタルサーチである。
history-search-backward
現在の行の先頭からポイントまでの間の文字列を、履歴を遡って検索する。 これは非インクリメンタルサーチである。
history-substring-search-backward
現在の行の先頭から現在のカーソル位置(ポイント)までの間の文字列を、ヒストリを後方に検索する。 検索文字列はヒストリ行のどこにマッチしてもよい。 これは非インクリメンタルサーチである。
history-substring-search-forward
現在の行の先頭からポイントまでの間の文字列を、履歴の前方から検索する。 検索文字列は、履歴行のどこにマッチしてもよい。 これは非インクリメンタルサーチである。
yank-nth-arg (M-C-y)
前のコマンドの最初の引数(通常は前の行の2番目の単語)を point に挿入する。 引数nで、前のコマンドからn番目の単語を挿入する(前のコマンドの単語は単語0から始まる)。 負の引数を指定すると、前のコマンドの最後からn番目の単語が挿入される。 引数nが計算されると、"!n "履歴展開が指定されたかのように、引数が抽出される。
yank-last-arg (M-., M-_)
直前のコマンドの最後の引数(直前の履歴エントリーの最後の単語)を挿入する。 数値引数では、yank-nth-argとまったく同じように動作する。 yank-last-argを連続して呼び出すと、履歴リスト内を遡り、各行の最後の単語(または最初の呼び出しの引数で指定された単語)を順番に挿入する。 これらの連続した呼び出しに与えられる数値引数は、履歴を進む方向を決定する。負の引数は、履歴を進む方向(戻るまたは進む)を切り替える。 ヒストリ展開機能は、"!$"ヒストリ展開が指定されたかのように、最後の単語を抽出するために使用される。
shell-expand-line (M-C-e)
シェルが行うように行を展開する。 これは、シェルのすべての単語展開と同様に、エイリアス展開とヒストリ展開を行う。 ヒストリ展開の説明については、後述の HISTORY EXPANSION を参照のこと。
history-expand-line (M-^)
現在の行のヒストリ拡張を行う。 ヒストリ拡張の説明については、以下の「ヒストリ拡張」を参照のこと。
magic-space
現在の行にヒストリ拡張を行い、スペースを挿入する。 ヒストリ展開の説明については、以下の「HISTORY EXPANSION 」を参照のこと。
alias-expand-line
現在の行でエイリアスの展開を行う。 エイリアスの展開については、上記のALIASESを参照のこと。
history-and-alias-expand-line
現在の行の履歴とエイリアスの展開を行う。
insert-last-argument (M-., M-_)
yank-last-argの同義語。
operate-and-get-next (C-o)
現在行を受け取って実行し、現在行に相対する次の行をヒストリから取得して編集する。 数値引数が与えられていれば、現在行の代わりに使用する履歴エントリを指定する。
edit-and-execute-command (C-x C-e)
現在のコマンドラインでエディタを起動し、その結果をシェルコマンドとして実行する。Bashは、$VISUAL、$EDITOR、emacsの順にエディタとして起動しようとする。

Commands for Changing Text

end-of-file (usually C-d)
’’sttyなどで設定されているファイル終了を示す文字である。 行に文字がなく、pointが行頭にあるときにこの文字が読み込まれると、 Readlineはこれを入力の終わりと解釈し、EOFを返す。
delete-char (C-d)
pointの文字を削除する。 C-dが一般的であるように、この関数がttyのEOF文字と同じ文字にバインドされている場合、その影響については上記を参照のこと。
backward-delete-char (Rubout)
カーソルの後ろの文字を削除する。 数値引数が与えられた場合、削除したテキストをキルリングに保存する。
forward-backward-delete-char
カーソルが行末にある場合を除き、カーソルの下にある文字を削除する。
quoted-insert (C-q, C-v)
入力された次の文字をそのまま行に追加する。 これは、例えばC-qのような文字を挿入する方法である。
tab-insert (C-v TAB)
タブ文字を挿入する。
self-insert (a, b, A, 1, !, ...)
入力された文字を挿入する。
transpose-chars (C-t)
pointの前の文字をpointの文字の上にドラッグし、pointも前に移動させる。 pointが行末にある場合、pointの前の2文字を転置する。 負の引数は効果がない。
transpose-words (M-t)
pointの前の単語をドラッグして、pointの後の単語の上にpointを移動させる。pointが行末にある場合は、行末の2つの単語を入れ替える。
upcase-word (M-u)
現在の(またはそれに続く)単語を大文字にする。 負の引数を指定すると、前の単語を大文字にするが、pointは移動しない。
downcase-word (M-l)
現在の(またはそれに続く)単語を小文字にする。 負の引数を指定すると、前の単語を小文字にするが、pointは移動しない。
capitalize-word (M-c)
現在の(または次の)単語を大文字にする。 否定引数では、前の単語を大文字にするが、pointは動かさない。
overwrite-mode
上書きモードを切り替える。 明示的な正の数値引数を指定すると、上書きモードに切り替わる。 正でない数値引数を指定すると、挿入モードに切り替わる。 このコマンドはemacsモードにのみ影響する。 readline()の各呼び出しは、insertモードで始まる。 overwriteモードでは、self-insertに束縛された文字は、テキストを右に押し出すのではなく、その位置でテキストを置き換える。 backward-delete-charにバインドされた文字は、pointの前の文字をスペースに置き換える。 デフォルトでは、このコマンドはバインドされていない。

Killing and Yanking

kill-line (C-k)
pointから行末までのテキストをキルする。
backward-kill-line (C-x Rubout)
ラインの先頭までキルバックする。
unix-line-discard (C-u)
pointから行頭まで後方にキルする。 キルされたテキストはキルリングに保存される。
kill-whole-line
現在行のすべての文字を、ポイントがどこであろうと殺す。
kill-word (M-d)
pointから現在の単語の終わりまで、または単語と単語の間の場合は次の単語の終わりまでをキルする。 単語の境界はforward-wordで使われるものと同じである。
backward-kill-word (M-Rubout)
後ろの単語を殺す。 単語の境界線はbackward-wordで使われるものと同じである。
shell-kill-word
pointから現在の単語の終わりまで、または単語と単語の間の場合は次の単語の終わりまでをキルする。 単語の境界は、shell-forward-wordで使われるものと同じである。
shell-backward-kill-word
pointの後ろの単語を消す。 単語の境界はshell-backward-wordで使われるものと同じである。
unix-word-rubout (C-w)
空白を単語の境界として、pointの後ろの単語を殺す。 キルされたテキストはキルリングに保存される。
unix-filename-rubout
空白文字とスラッシュ文字を単語の境界として、pointの後ろの単語を消す。 キルされたテキストはキルリングに保存される。
delete-horizontal-space (M-\)
pointの周りのスペースとタブをすべて削除する。
kill-region
現在の領域のテキストを消す。
copy-region-as-kill
領域内のテキストをキルバッファにコピーする。
copy-backward-word
point前のワードをキルバッファにコピーする。 ワード境界はバックワードワードと同じである。
copy-forward-word
ワードに続く点をキルバッファにコピーする。 ワード境界はforward-wordと同じである。
yank (C-y)
キリング上部をバッファーの中に引き込む。
yank-pop (M-y)
キルリングを回転させ、新しいトップをヤンクする。 ヤンクまたはヤンクポップに続いてのみ機能する。

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.
-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.
-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 ...]
オプションがなければ、各シェル変数の名前と値が、現在設定されている変数を設定またはリセットするための入力として再利用できる形式で表示される。 読み取り専用の変数はリセットできない。 posix モードでは、シェル変数のみが一覧表示される。 出力は、現在のロケールに従ってソートされる。 オプションが指定されると、シェル属性を設定または解除する。 オプション処理後に残った引数は、位置パラメータの値として扱われ、 $1, $2, ... $n の順に代入される。 オプションが指定された場合、以下の意味を持つ:
-a
作成または変更された各変数や関数にはexport属性が与えられ、後続のコマンドの環境にエクスポートされるようにマークされる。
-b
終了したバックグラウンドジョブのステータスを、次のプライマリプロンプトの前ではなく、直ちに報告する。 これは、ジョブ制御が有効な場合にのみ有効である。
-e
パイプライン(単一の単純なコマンドで構成される)、リスト、または複合コマンド(上記の SHELL GRAMMAR を参照)がゼロ以外のステータスで終了した場合、直ちに終了する。 失敗したコマンドが、whileまたはuntilキーワードの直後のコマンドリストの一部、ifまたはelif予約語に続くテストの一部、最後の&&または||に続くコマンドを除く&&または||リストで実行されるコマンドの一部、パイプラインの最後のコマンド以外のコマンド、コマンドの戻り値が! eが無視されている間にコマンドが失敗したため、サブシェル以外の複合コマンドがゼロ以外のステータスを返した場合、シェルは終了しない。 ERRのトラップが設定されている場合は、シェルが終了する前に実行される。 このオプションは、シェル環境と各サブシェル環境に個別に適用され (上記の「 COMMAND EXECUTION ENVIRONMENT 」を参照)、サブシェル内のすべてのコマンドを実行する前にサブシェルが終了することがある。
-eが無視されるコンテキストで複合コマンドまたはシェル関数が実行される場合、-eが設定されているコマンドで失敗ステータスが返されたとしても、複合コマンドまたは関数本体内で実行されるコマンドはいずれも-e設定の影響を受けない。 -eが無視されるコンテキストで実行中に複合コマンドまたはシェル関数が-eを設定した場合、複合コマンドまたは関数呼び出しを含むコマンドが完了するまで、その設定は影響を及ぼさない。
-f
Disable pathname expansion.
-h
コマンドを実行するために検索する際に、コマンドの場所を記憶する。 これはデフォルトで有効になっている。
-k
コマンド名の前にある引数だけでなく、代入文の形をしたすべての引数がコマンドの環境に置かれる。
-m
モニターモード。 ジョブ制御が有効になっている。 このオプションは、対話型シェルをサポートしているシステムではデフォルトでオンになっている(上記の JOB CONTROL を参照)。 すべてのプロセスは別々のプロセスグループで実行される。 バックグラウンド・ジョブが完了すると、シェルは終了ステータスを含む行を表示する。
-n
コマンドを読むが実行はしない。 これは、シェルスクリプトの構文エラーをチェックするために使用される。 対話型シェルでは無視される。
-o option-name
オプション名は以下のいずれかである:
allexport
-aと同じ
braceexpand
-Bと同じ
emacs
emacsスタイルのコマンドライン編集インターフェイスを使用する。 これはデフォルトで有効になっている。ただし、 --noeditingオプションを指定してシェルを起動した場合はこの限りではない。 これは、read -eで使用される編集インターフェースにも影響する。
errexit
-eと同じ
errtrace
-Eと同じ
functrace
-Tと同じ
hashall
-hと同じ
histexpand
-Hと同じ
history
上記の「 HISTORY 」で説明したように、コマンドヒストリーを有効にする。 このオプションは対話型シェルではデフォルトでオンになっている。
ignoreeof
あたかもシェルコマンド ``IGNOREEOF=10 が実行されたかのような効果がある(上記のシェル変数を参照)。
keyword
-kと同じ
monitor
-mと同じ
noclobber
-Cと同じ
noexec
-nと同じ
noglob
-fと同じ
nolog
現在は無視されている。
notify
-bと同じ
nounset
-uと同じ
onecmd
-tと同じ
physical
-Pと同じ
pipefail
設定されている場合、パイプラインの戻り値は、0以外のステータスで終了した最後の(最も右側の)コマンドの値、またはパイプライン内のすべてのコマンドが正常に終了した場合は0になる。 このオプションはデフォルトでは無効になっている。
posix
デフォルトの動作がPOSIX標準と異なるbashの動作を、標準に合わせるように変更する(posixモード)。 posixモードがbashの動作にどのような影響を与えるかを詳しく説明したドキュメントへのリファレンスは、以下のSEE ALSOを参照のこと。
privileged
-pと同じ
verbose
-vと同じ
vi
Viスタイルのコマンドライン編集インターフェイスを使用する。 これは、read -eで使用される編集インターフェースにも影響する。
xtrace
Same as -x.
option-name なしで -o を指定すると、現在のオプションの値が表示される。 option-name なしで +o を指定すると、現在のオプション設定を再現する一連の set コマンドが標準出力に表示される。
-p
特権モードをオンにする。 このモードでは、$ENV と $BASH_ENV ファイルは処理されず、シェル関数は環境から継承されず、 SHELLOPTS、BASHOPTS、CDPATH、GLOBIGNORE 変数が環境にある場合は無視される。 実効ユーザー(グループ)IDが実ユーザー(グループ)IDに等しくない状態でシェルが起動され、-pオプションが与えられなかった場合、これらのアクションが実行され、実効ユーザーIDが実ユーザーIDに設定される。 起動時に-pオプションが指定された場合、実効ユーザーIDはリセットされない。 このオプションをオフにすると、実効ユーザーIDとグループIDが実際のユーザーIDとグループIDに設定される。
-t
コマンドを1つ読んで実行したら終了する。
-u
特殊パラメータ "@" と "*" 以外の未設定の変数とパラメータを、パラメータ展開の際にエラーとして扱う。 未設定の変数やパラメータを展開しようとした場合、シェルはエラーメッセージを表示し、対話的でない場合は0以外のステータスで終了する。
-v
シェルの入力行が読み込まれると、それを表示する。
-x
各単純コマンド、forコマンド、caseコマンド、selectコマンド、または算術コマンドを展開した後、PS4の展開値を表示し、その後にコマンドとその展開された引数、または関連する単語リストを表示する。
-B
シェルはブレース展開を行う(上記のブレース展開を参照)。 これはデフォルトでオンになっている。
-C
設定すると、bashは既存のファイルを>、>&、<>リダイレクト演算子で上書きしない。 この設定は、出力ファイルを作成するときに > の代わりに >| というリダイレクト演算子を使うことで上書きすることができる。
-E
設定されている場合、ERRのトラップはすべて、シェル関数、コマンド置換、サブシェル環境で実行されるコマンドに継承される。 このような場合、ERRトラップは通常継承されない。
-H
スタイルの履歴置換を有効にする。 このオプションは、シェルが対話型の場合、デフォルトでオンになる。
-P
設定されていると、カレント作業ディレクトリを変更するcdなどのコマンドを実行するときに、シェルはシンボリックリンクを解決しない。 代わりに物理的なディレクトリ構造を使用する。 デフォルトでは、カレント・ディレクトリを変更するコマンドを実行するとき、bashはディレクトリの論理的な連鎖に従う。
-T
設定されている場合、DEBUGとRETURNのトラップは、シェル関数、コマンド置換、サブシェル環境で実行されるコマンドに継承される。 DEBUGとRETURNのトラップは通常、このような場合には継承されない。
--
このオプションの後に引数が続かない場合、位置パラメーターは設定されない。そうでない場合、位置パラメーターは引数に設定され、たとえ引数の一部が-で始まるとしても、位置パラメーターは引数に設定される。
-
オプションの終了を合図し、残りのすべての引数を位置パラメーターに代入させる。 xと-vオプションはオフになる。 引数がない場合、位置パラメーターは変更されない。
特に断りのない限り、オプションはデフォルトでオフになっている。 ではなく+を使用すると、これらのオプションはオフになる。 オプションは、シェルを起動する際の引数として指定することもできる。 現在のオプションのセットは $- にある。 無効なオプションに遭遇しない限り、戻り値は常に真である。
shift [n]
n+1 ...までの位置パラメーターは$1 ...に改名される。 nは、$#以下の非負の数でなければならない。 nが0の場合、パラメーターは変更されない。 nが与えられない場合、1とみなされる。 nが$#より大きい場合、位置パラメーターは変更されない。 戻り値は、nが$#より大きいか0より小さい場合は0より大きく、それ以外は0である。
shopt [-pqsu] [-o] [optname ...]
オプションのシェル動作を制御する設定の値を切り替える。 設定値は、以下に列挙するものか、-o オプションを使用した場合は set 組み込みコマンドの -o オプションで使用可能なものである。 オプションなし、または -p オプションを指定すると、設定可能なすべてのオプションのリストが表示され、それぞれが設定されているかどうかが示される。 -pオプションを指定すると、入力として再利用できる形式で出力が表示される。 その他のオプションの意味は以下のとおりである:
-s
それぞれのoptnameを有効にする(設定する)。
-u
各 optname を無効にする(設定解除する)。
-q
通常の出力を抑制する(クワイエットモード)。戻り値は、optnameが設定されているか否かを示す。 複数のoptname引数を-qで指定した場合、すべてのoptnameが有効になっていれば戻り値は0であり、そうでなければ0ではない。
-o
optnameの値を、setビルトインの-oオプションで定義された値に制限する。
optname引数を指定せずに-sまたは-uを使用した場合、shoptはそれぞれ設定または未設定のオプションのみを表示する。 特に断りのない限り、shoptのオプションはデフォルトで無効(未設定)になっている。
オプションを一覧表示するときの戻りステータスは、すべての optname が有効な場合は 0 であり、そうでない場合は 0 以外である。 オプションを設定または解除する場合、optnameが有効なシェルオプションでない場合を除き、戻り値は0である。
ショップオプションのリストは以下の通り:
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_ALIASESBASH_ARGV0BASH_CMDSBASH_COMMANDBASH_SUBSHELLBASHPIDCOMP_WORDBREAKSDIRSTACKEPOCHREALTIMEEPOCHSECONDSFUNCNAMEGROUPSHISTCMDLINENORANDOMSECONDSSRANDOMのどれかがアンセットされると、たとえその後にリセットされたとしても、特別なプロパティは失われる。 名前が読み取り専用でない限り、終了ステータスは真である。
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でディレクトリを変更する
  • SHELLPATHHISTFILEENVBASH_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