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--)
既に蓄積されている引数にこの桁を追加するか、新しい引数を開始する。 M--負の引数を開始する。
universal-argument
これは、引数を指定するもう1つの方法である。 このコマンドの後に1桁以上の数字が続き、オプションで先頭にマイナス記号が付く場合、その数字が引数を定義する。 このコマンドの後に数字が続く場合、再度universal-argumentを実行すると数値引数は終了するが、それ以外は無視される。 特殊なケースとして、このコマンドの直後に数字でもマイナス記号でもない文字が続く場合、次のコマンドの引数カウントは4倍になる。 引数カウントは最初は1なので、この関数を1回目に実行すると引数カウントは4となり、2回目に実行すると引数カウントは16となる。

Completing

complete (TAB)
point前のテキストに対して補完を試みる。 Bashは、テキストを変数(テキストが$で始まる場合)、ユーザー名(テキストが~で始まる場合)、ホスト名(テキストが@で始まる場合)、コマンド(エイリアスや関数を含む)として順番に扱い、補完を試みる。 どれもマッチしない場合は、ファイル名補完を試みる。
possible-completions (M-?)
pointの前に、テキストの可能な完成形を列挙する。
insert-completions (M-*)
possible-completionsによって生成されたであろう、pointの前のテキストのすべての補完を挿入する。
menu-complete
completeと似ているが、補完される単語を、補完可能リストからマッチする単語1つに置き換える。 menu-completeを繰り返し実行することで、補完可能な単語リストに順番にマッチする単語を挿入していく。 補完のリストが終わると、ベルが鳴らされ(ベルスタイルの設定に従う)、元のテキストに戻る。 引数nを指定すると、マッチのリストがn個前に進む。 このコマンドはTABにバインドされることを意図しているが、デフォルトではバインドされていない。
menu-complete-backward
menu-completeと同じだが、あたかもmenu-completeに負の引数を与えたかのように、補完可能なリストを後方に移動する。 このコマンドはデフォルトではバインドされていない。
delete-char-or-list
行頭または行末でない場合、カーソルの下にある文字を削除する(delete-charと同じ)。 行末にある場合は、可能補完と同じ動作をする。このコマンドはデフォルトではバインドされていない。
complete-filename (M-/)
pointより前のテキストでファイル名の補完を試みる。
possible-filename-completions (C-x /)
pointの前のテキストをファイル名として扱い、可能な補完を列挙する。
complete-username (M-~)
pointより前のテキストをユーザー名として扱い、補完を試みる。
possible-username-completions (C-x ~)
point前のテキストをユーザー名として扱い、可能な補完を列挙する。
complete-variable (M-$)
point前のテキストをシェル変数として扱い、補完を試みる。
possible-variable-completions (C-x $)
シェル変数として扱い、pointの前にあるテキストの可能な補完を列挙する。
complete-hostname (M-@)
pointより前のテキストをホスト名として扱い、補完を試みる。
possible-hostname-completions (C-x @)
pointの前のテキストをホスト名として扱い、可能な補完を列挙する。
complete-command (M-!)
pointより前のテキストをコマンド名として扱い、補完を試みる。 コマンド補完は、エイリアス、予約語、シェル関数、シェル組み込み関数、そして最後に実行ファイル名の順に、テキストとのマッチングを試みる。
possible-command-completions (C-x !)
pointの前のテキストをコマンド名として扱い、可能な補完を列挙する。
dynamic-complete-history (M-TAB)
point前のテキストに対して補完を試み、補完にマッチする可能性のある履歴リストの行とテキストを比較する。
dabbrev-expand
point前のテキストに対してメニュー補完を試み、補完にマッチする可能性のある履歴リストの行とテキストを比較する。
complete-into-braces (M-{)
ファイル名の補完を実行し、可能な補完のリストを中括弧で囲んで挿入し、シェルがそのリストを利用できるようにする(上記のBrace Expansion を参照)。

Keyboard Macros

start-kbd-macro (C-x ()
現在のキーボードマクロに入力された文字の保存を開始する。
end-kbd-macro (C-x ))
現在のキーボードマクロに入力された文字の保存を停止し、定義を保存する。
call-last-kbd-macro (C-x e)
最後に定義したキーボードマクロを再実行し、マクロ内の文字をキーボードで入力したように表示させる。
print-last-kbd-macro ()
最後に定義されたキーボードマクロを inputrc ファイルに適した形式で表示する。

Miscellaneous

re-read-init-file (C-x C-r)
inputrcファイルの内容を読み込み、そこで見つかったバインディングや変数の割り当てを取り込む。
abort (C-g)
現在の編集コマンドを中止し、端末のベルを鳴らす(ベルスタイルの設定に従う)。
do-lowercase-version (M-A, M-B, M-x, ...)
メタファー化された文字xが大文字の場合、対応するメタファー化された小文字にバインドされたコマンドを実行する。 xがすでに小文字である場合の動作は未定義である。
prefix-meta (ESC)
次に入力された文字をメタファイする。 ESC fはMeta-fと等価である。
undo (C-_, C-x C-u)
行ごとに個別に記憶されるインクリメンタルなアンドゥ。
revert-line (M-r)
この行に加えられたすべての変更を元に戻す。 これは、行を初期状態に戻すのに十分な回数、undoコマンドを実行するようなものだ。
tilde-expand (M-&)
現在の単語にチルダ展開を行う。
set-mark (C-@, M-<space>)
マークをポイントに設定する。 数値引数が与えられると、マークはその位置に設定される。
exchange-point-and-mark (C-x C-x)
ポイントとマークを入れ替える。 現在のカーソル位置が保存された位置に設定され、古いカーソル位置がマークとして保存される。
character-search (C-])
文字が読み込まれ、ポイントはその文字の次の出現箇所に移動する。 負のカウントは、前の出現を検索する。
character-search-backward (M-C-])
文字が読み込まれ、その文字の前にポイントが移動する。 負のカウントは、それ以降の出現を検索する。
skip-csi-sequence
HomeやEndのようなキーに定義されているようなマルチキーシーケンス を消費するのに十分な文字を読む。 このシーケンスが"\["にバインドされている場合、このようなシーケンスを生成するキーは、編集バッファーに迷子文字を挿入する代わりに、readlineコマンドに明示的にバインドされない限り、何の効果も持たない。 これはデフォルトではバインドされていないが、通常は ESC-[ にバインドされている。
insert-comment (M-#)
数値引数がない場合、readline comment-begin変数の値が現在の行の先頭に挿入される。 行頭の文字がcomment-beginの値と一致しない場合、その値が挿入され、一致しない場合、行頭からcomment-beginの文字が削除される。 どちらの場合も、行は改行がタイプされたものとして受け入れられる。comment-beginのデフォルト値は、現在の行をシェルコメントにする。 数値引数によってコメント文字が削除されると、その行はシェルによって実行される。
glob-complete-word (M-g)
pointの前の単語は、パス名展開のパターンとして扱われ、暗黙的にアスタリスクが付加される。 このパターンは、可能な補完のために、マッチするファイル名のリストを生成するために使われる。
glob-expand-word (C-x *)
pointの前の単語は、パス名展開のパターンとして扱われ、一致する ファイル名のリストが、単語を置き換えて挿入される。 数値引数が与えられると、パス名展開の前にアスタリスクが付加される。
glob-list-expansions (C-x g)
glob-expand-wordによって生成されたであろう展開のリストが表示され、行が再描画される。 数値引数が与えられると、パス名展開の前にアスタリスクが付加される。
dump-functions
すべての関数とそのキーバインディングをreadline出力ストリームに出力する。 数値引数が与えられた場合、出力は inputrc ファイルの一部となるようにフォーマットされる。
dump-variables
設定可能なすべての readline 変数とその値を readline 出力ストリームに出力する。 数値引数が与えられた場合、出力は inputrc ファイルの一部となるようにフォーマットされる。
dump-macros
マクロにバインドされているすべてのreadlineキーシーケンスと、それらが出力する文字列を表示する。 数値引数が与えられた場合、出力は inputrc ファイルの一部となるようにフォーマットされる。
display-shell-version (C-x C-v)
現在のbashインスタンスのバージョン情報を表示する。

Programmable Completion

complete組み込み関数(後述の「SHELL BUILTIN COMMANDS 」を参照)を使用して補完指定(compspec)が定義されているコマンドの引数に対して単語補完を行おうとすると、プログラム可能な補完機能が呼び出される。

まず、コマンド名が特定される。 コマンドワードが空文字列の場合(空行の先頭で補完が試みられる)、completeの-Eオプションで定義されたcompspecが使用される。 そのコマンドに対してcompspecが定義されている場合は、そのcompspecを使用して、その単語に対して可能な補完のリストを生成する。 コマンドの単語がフルパス名の場合、フルパス名に対するcompspecが最初に検索される。 完全なパス名に対応するcompspecが見つからない場合は、最後のスラッシュに続く部分のcompspecを検索する。 これらの検索の結果、compspecが見つからなかった場合、 completeの-Dオプションで定義されたcompspecがデフォルトとして使用される。 デフォルトのcompspecがない場合、bashは最終手段としてコマンド語のエイリアス展開を試み、成功した展開からコマンド語のcompspecを見つけようとする。

compspecが見つかると、それを使用して一致する単語のリストを生成する。 compspecが見つからなかった場合は、上記の「補完」で説明したデフォルトのbash補完が実行される。

まず、compspecで指定されたアクションが使用される。 補完される単語の接頭辞を持つマッチのみが返される。 ファイル名またはディレクトリ名の補完に -f または -d オプションが使用されている場合、シェル変数 FIGNORE がマッチのフィルタリングに使用される。

Gオプションのパス名展開パターンで指定された補完が次に生成される。パターンによって生成される単語は、補完される単語と一致する必要はない。 GLOBIGNOREシェル変数はマッチのフィルタリングには使われず、FIGNORE変数が使われる。

次に、-Wオプションの引数として指定された文字列が検討される。 文字列はまず、IFS特殊変数の文字を区切り文字として使って分割される。 シェル引用符付けは尊重される。 次に、上記の「EXPANSION」で説明したように、波括弧展開、チルダ展開、 パラメータ展開、変数展開、コマンド置換、算術展開を使って各単語が展開される。 その結果は、上記の「単語の分割」で説明したルールで分割される。 展開の結果は、補完される単語と前方一致され、一致した単語が可能な補完となる。

これらのマッチが生成された後、-Fおよび-Cオプションで指定されたシェル関数またはコマンドが呼び出される。 コマンドまたは関数が呼び出されると、COMP_LINE、COMP_POINT、COMP_KEY、COMP_TYPE 変数には、前述の「シェル変数」で説明した値が代入される。 シェル関数が呼び出される場合、COMP_WORDS 変数と COMP_CWORD 変数も設定される。 関数またはコマンドが呼び出されると、第1引数($1)は補完される引数のコマンド名、第2引数($2)は補完される単語、第3引数($3)は現在のコマンド行で補完される単語の前にある単語である。 生成された補完語を補完される単語と照合するフィルタリングは行われない。

Fで指定された関数は最初に呼び出される。 この関数は、後述の compgen 組み込み関数を含む、シェルのどの機能を使ってもマッチを生成できる。 この関数は、COMPREPLY配列変数に、配列の要素ごとに1つずつ、可能な補完を入れなければならない。

次に、-Cオプションで指定されたコマンドが、コマンド置換と同等の環境で起動される。 このコマンドは、1行に1つずつ、補完候補のリストを標準出力に出力する。必要であれば、バックスラッシュを使って改行をエスケープすることもできる。

すべての補完候補が生成された後、-Xオプションで指定されたフィルターがリストに適用される。 フィルターとは、パス名展開に使われるパターンである。パターン中の&は、補完される単語のテキストに置き換えられる。 リテラル&は、バックスラッシュでエスケープすることができる。バックスラッシュは、マッチを試みる前に取り除かれる。 パターンにマッチした補完はすべてリストから削除される。 この場合、パターンにマッチしない補完はすべて削除される。 nocasematchシェルオプションが有効な場合、アルファベットの大文字小文字を区別せずにマッチが行われる。

最後に、-P と -S オプションで指定された接頭辞と接尾辞が補完リストの各メンバーに追加され、その結果が可能な補完のリストとして readline 補完コードに返される。

先に適用されたアクションがマッチを生成せず、compspec の定義時に -o dirnames オプションが補完のために指定されていた場合、ディレクトリ名の補完が試みられる。

compspec の定義時に -o plusdirs オプションが指定されていた場合、 ディレクトリ名の補完が試行され、マッチした場合は他のアクションの結果に追加される。

デフォルトでは、compspecが見つかった場合、そのcompspecが生成するものはすべて、可能な補完のフルセットとして補完コードに返される。 デフォルトのbash補完は試行されず、readlineデフォルトのファイル名補完は無効になる。 compspec の定義時に -o bashdefault オプションが指定されていた場合、compspec がマッチを生成しなかった場合は bash のデフォルト補完が試行される。 compspec 定義時に -o default オプションを指定して補完を行なった場合、compspec (および試行された場合はデフォルトの bash 補完) がマッチしない場合、readline のデフォルト補完が実行される。

compspecでディレクトリ名の補完が必要だと指定された場合、プログラム可能な補完関数は、mark-symlinked-directories readline変数の設定に関係なく、mark-directories readline変数の値に従って、ディレクトリへのシンボリックリンクである補完された名前にスラッシュを付加する。

補完を動的に変更するサポートもある。 これは、complete -Dで指定されたデフォルトの補完と組み合わせて使用する場合に最も便利である。 補完ハンドラとして実行されるシェル関数は、終了ステータス124を返すことで、補完を再試行すべきであることを示すことができる。 シェル関数が124を返し、(関数が実行されたときに最初の引数として与えられた)補完を試みているコマンドに関連するcompspecを変更した場合、プログラマブル補完は、そのコマンドの新しいcompspecを見つけようとして、最初からやり直す。 これにより、一度にすべてを読み込むのではなく、補完を試みるたびに動的に補完セットを構築することができる。

例えば、コンプスペックのライブラリーがあり、それぞれがコマンド名に対応するファイルに保存されていると仮定すると、次のようなデフォルトの補完関数が補完を動的にロードすることになる:

       _completion_loader()
       {
            . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
       }
       complete -D -F _completion_loader -o bashdefault -o default

HISTORY

set 組み込み関数の -o history オプションを有効にすると、シェルはコマンド履歴(以前に入力したコマンドのリスト)にアクセスできるようになる。 HISTSIZE 変数の値は、履歴リストに保存するコマンドの数として使用される。 最後のHISTSIZEコマンド(デフォルト500)のテキストが保存される。 シェルは、パラメータと変数の拡張(上記のEXPANSIONを参照)の前に、ヒストリ拡張が実行された後に、シェル変数HISTIGNOREHISTCONTROLの値に従って、各コマンドをヒストリリストに保存する。

起動時に、履歴は変数HISTFILEで指定されたファイル(デフォルトは~/.bash_history)から初期化される。 HISTFILEの値で指定されたファイルは、必要に応じてHISTFILESIZEの値で指定された行数以下に切り詰められる。 HISTFILESIZEが未設定、またはNULL、非数値、0未満の数値に設定されている場合、 履歴ファイルは切り捨てられない。 ヒストリファイルが読み込まれると、ヒストリコメント文字の直後に数字が続く行は、次のヒストリ行のタイムスタンプとして解釈される。これらのタイムスタンプは、変数HISTTIMEFORMATの値に応じてオプションで表示される。 履歴を有効にしたシェルが終了すると、最後の $HISTSIZE 行が履歴リストから $HISTFILE にコピーされる。 histappend シェル・オプションが有効な場合 (以下の SHELL BUILTIN COMMANDS の shopt の説明を参照のこと)、その行はヒストリ・ファイルに追加される。 HISTFILEが設定されていない場合、または履歴ファイルが書き込み不可能な場合、履歴は保存されない。 HISTTIMEFORMAT変数が設定されている場合、履歴ファイルにタイムスタンプが書き込まれ、履歴コメント文字でマークされる。 これは、タイムスタンプを他のヒストリ行と区別するためにヒストリコメント文字を使用する。 ヒストリを保存した後、ヒストリファイルはHISTFILESIZE行以下に切り詰められる。 HISTFILESIZEが設定されていないか、NULL、数値以外、または0未満の数値に設定されている場合、ヒストリファイルは切り捨てられない。

組み込みコマンドfc(後述の「SHELL BUILTIN COMMANDS 」を参照)を使用して、ヒストリリストの一部を一覧表示または編集して再実行することができる。 history組み込みコマンドは、履歴リストの表示や変更、履歴ファイルの操作に使用できる。 コマンドライン編集を使用する場合、各編集モードで履歴リストにアクセスできる検索コマンドが利用できる。 シェルでは、どのコマンドを履歴リストに保存するかを制御できる。 HISTCONTROL 変数と HISTIGNORE 変数を設定することで、入力されたコマンドの一部だけをシェルに保存させることができる。 cmdhist シェル・オプションを有効にすると、シェルは複数行のコマンドの各行を同じ履歴エントリに保存しようとし、構文の正しさを保つために必要な場合はセミコロンを追加する。 lithist シェル・オプションは、セミコロンの代わりに改行を埋め込んでコマンドを保存するようにする。 シェル・オプションの設定と解除については、後述の「SHELL BUILTIN COMMANDS 」の shopt 組み込みコマンドの説明を参照のこと。

HISTORY EXPANSION

シェルは、cshのヒストリ展開に似たヒストリ展開機能をサポートしている。 このセクションでは、どのような構文機能が利用できるかを説明する。 この機能は対話型シェルではデフォルトで有効になっており、set builtin コマンドの +H オプションを使用して無効にすることができる(後述の「SHELL BUILTIN COMMANDS」を参照)。 非対話型シェルは、デフォルトではヒストリ展開を行わない。

ヒストリ拡張は、ヒストリリストから単語を入力ストリームに導入し、コマンドを繰り返したり、前のコマンドの引数を現在の入力行に挿入したり、前のコマンドのエラーを素早く修正したりすることを容易にする。

ヒストリ展開は、完全な行が読み込まれた直後、シェルがそれを単語に分割する前に実行され、前の行のクォートを考慮することなく、各行に対して個別に実行される。 これは2つの部分に分かれて行われる。 1つ目は、置換時に履歴リストからどの行を使用するかを決定することである。 もうひとつは、その行の一部を現在の行に含めるために選択することである。 履歴から選択された行がイベントであり、その行の一部が単語となる。 選択された単語を操作するために、さまざまな修飾子が利用できる。 行は入力を読むときと同じ方法で単語に分割され、引用符で囲まれたメタ文字で区切られた複数の単語は1つの単語とみなされる。 ヒストリ拡張は、ヒストリ拡張文字(デフォルトでは! ヒストリ展開文字を引用符で囲むことができるのは、バックスラッシュ( \ )と一重引用符だけであるが、二重引用符で囲んだ文字列の閉じ二重引用符の直前にヒストリ展開文字がある場合も、引用符で囲んだものとして扱われる。

extglobシェル・オプションが有効な場合、()も展開を抑制する。

shopt 組み込み関数で設定可能ないくつかのシェル・オプションを使用して、ヒストリ展開の動作を調整することができる。 histverify シェル・オプションが有効で(後述の SHELL BUILTIN COMMANDS の説明を参照)、readline が使用されている場合、ヒストリ置換はシェル・パーサにすぐには渡されない。 その代わりに、展開された行はreadline編集バッファに再ロードされ、さらに修正される。 readlineが使用されていて、histreeditシェルオプションが有効になっている場合、失敗したヒストリ置換は修正のためにreadline編集バッファにリロードされる。 history 組み込みコマンドの -p オプションを使用すると、ヒストリ拡張を使用する前に、その拡張が何をするかを確認することができる。 history組み込みコマンドの-sオプションは、コマンドを実際に実行することなく、履歴リストの最後に追加するために使用される。

シェルでは、ヒストリ展開メカニズムで使用されるさまざまな文字を制御できる(上記の「Shell Variables 」の「histchars」の説明を参照のこと)。 シェルはヒストリファイルを書き込む際に、ヒストリのタイムスタンプをマークするためにヒストリコメント文字を使用する。

Event Designators

イベント・デジグネーターは、ヒストリーリスト内のコマンドラインエントリーの参照である。 参照が絶対的でない限り、イベントはヒストリーリストの現在の位置からの相対的なものである。

!
空白、改行、キャリッジリターン、=、または ( shopt 組み込み関数で extglob シェルオプションが有効になっている場合) が続く場合を除き、履歴置換を開始する。
!n
コマンドラインnを参照のこと。
!-n
現在のコマンドマイナスnを参照。
!!
前のコマンドを参照のこと。 これは `!-1' と同意語である。
!string
文字列で始まる履歴リストで、現在の位置より前にある最新のコマンドを参照する。
!?string[?]
stringを含む履歴リストで、現在の位置より前にある最新のコマンドを参照する。 stringの直後に改行が続く場合、末尾の ? は省略できる。 stringがない場合、最新の検索文字列が使われる。以前の検索文字列がない場合はエラーとなる。
^string1^string2^
素早く置換する。 文字列1を文字列2に置き換えて、前のコマンドを繰り返す。 (以下のModifiers を参照のこと)。
!#
これまでに入力されたコマンドライン全体。

Word Designators

単語指定子は、イベントから必要な単語を選択するために使用される。 は、イベントの指定と単語指示子を区切る。 単語指定子が^、$、*、-、%で始まる場合は省略できる。 単語は行頭から順に番号付けされ、最初の単語は0(ゼロ)で示される。 単語は、現在の行に半角スペースで区切って挿入される。

0 (zero)
番目の単語。 シェルでは、これはコマンドワードである。
n
The nth word.
^
最初の引数。 つまり単語1である。
$
最後の単語。 これは通常最後の引数だが、行に単語が1つしかない場合は0番目の単語に展開される。
%
検索文字列が単語の一部である文字で始まっている場合、直近の `?string?' 検索でマッチした最初の単語。
x-y
'-y'は'0-y'を省略したものである。
0番目以外のすべての単語。 これは `1-$' と同意語である。 その場合は空文字列が返される。
x*
Abbreviates x-$.
x-
x*のようにx-$を省略するが、最後の単語は省略する。 xがない場合、デフォルトは0になる。

イベント指定なしで単語指定子を与えた場合、前のコマンドがイベントとして使用される。

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

特に断りのない限り、このセクションでオプションを受け付けるとして文書化されている各 組み込みコマンドは、オプションの終わりを示す -- を受け付ける。 test/[、true、false、test/[ 組み込み関数はオプションを受け付けず、 -- を特別に扱わない。 exit、logout、return、break、continue、let、shift 組み込み関数は、-- を必要とせずに - で始まる引数を受け入れ処理する。 引数を受け付けるがオプションを受け付けるように指定されていない他の組み込み関数は、 - で始まる引数を無効なオプションとして解釈し、この解釈を防ぐために -- を要求する。

: [arguments]
コマンドは引数を展開し、指定されたリダイレクションを実行するだけで、何もしない。 リターンステータスは0である。
. filename [arguments]
source filename [arguments]
現在のシェル環境で filename からコマンドを読み込んで実行し、 filename から最後に実行されたコマンドの終了ステータスを返す。 filename にスラッシュが含まれていない場合、PATH 内のファイル名を使用して filename を含むディレクトリを検索する。 PATHで検索されるファイルは実行可能である必要はない。 bashがposixモードでない場合、PATHにファイルが見つからなければ、カレント・ディレクトリが検索される。 shopt組み込みコマンドのsourcepathオプションがオフの場合、PATHは検索されない。 引数が与えられている場合、それらは filename が実行されるときの位置パラメーターとなる。 それ以外の場合、位置パラメーターは変更されない。 -Tオプションが有効な場合、sourceはDEBUGのトラップを継承する。有効でない場合、DEBUGトラップ文字列はsourceへの呼び出しの周囲に保存および復元され、sourceは実行中にDEBUGトラップの設定を解除する。 Tが設定されておらず、ソース・ファイルがDEBUGトラップを変更した場合、ソースが完了すると新しい値が保持される。 戻りステータスは、スクリプト内で最後に終了したコマンドのステータス(コマンドが実行されていない場合は0)であり、filenameが見つからないか読み取れない場合はfalseである。
alias [-p] [name[=value] ...]
引数なし、または-pオプションを指定したAliasは、alias name=valueという形式でエイリアスのリストを標準出力に表示する。 引数が与えられると、値が与えられる各名称に対してエイリアスが定義される。 valueの末尾に空白があると、エイリアスが展開されるときに、次の単語でエイリアスの置換がチェックされる。 値が与えられていない引数リストの各名に対して、エイリアスの名前と値が表示される。 エイリアスが定義されていない名前が与えられない限り、Aliasは真を返す。
bg [jobspec ...]
中断された各 jobspec をバックグラウンドで再開する。 jobspecが存在しない場合、シェルの現在のジョブの概念が使用される。 bg jobspecは、ジョブ制御が無効になっているときに実行されない限り0を返し、ジョブ制御が有効になっているときに実行された場合は、指定されたjobspecが見つからないか、ジョブ制御なしで開始された。
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
現在の readline キーと関数のバインディングを表示したり、キーシーケンスを readline 関数やマクロにバインドしたり、readline 変数を設定したりする。 オプション以外の各引数は、.inputrcに表示されるコマンドであるが、各バインディングまたはコマンドは、別の引数として渡されなければならない;例えば、'"˶-xC-r": re-read-init-file'. オプションが与えられた場合、以下の意味を持つ:
-m keymap
後続のバインディングの影響を受けるキーマップとしてkeymapを使う。 使用可能なキーマップ名は、emacs、emacs-standard、 emacs-meta、emacs-ctlx、vi、vi-move、vi-command、vi-insertである。 viはvi-commandと等価であり(vi-moveも同義語である)、emacsは emacs-standardと等価である。
-l
すべてのreadline関数の名前を列挙する。
-p
readlineの関数名とバインディングを、再読込できるように表示する。
-P
現在のreadline関数名とバインディングをリストアップする。
-s
マクロにバインドされたreadlineキーシーケンスと、それらが出力する文字列を、再読み取りできるように表示する。
-S
マクロにバインドされたreadlineキーシーケンスと、それらが出力する文字列を表示する。
-v
リードラインの変数名と値を再読込できるように表示する。
-V
現在のリードライン変数の名前と値をリストアップする。
-f filename
ファイル名からキーバインディングを読み込む。
-q function
どのキーが指定された関数を呼び出すかを問い合わせる。
-u function
指定された関数にバインドされているすべてのキーをアンバインドする。
-r keyseq
keyseqの現在のバインディングを削除する。
-x keyseq
shell-command
keyseqが入力されるたびにシェルコマンドを実行させる。 shell-commandが実行されると、シェルはREADLINE_LINE変数に読み取り行バッファの内容を設定し、READLINE_POINT変数とREADLINE_MARK変数にそれぞれ現在の挿入位置と保存された挿入位置(マーク)を設定する。 実行されたコマンドがREADLINE_LINEREADLINE_POINTREADLINE_MARKのいずれかの値を変更した場合、それらの新しい値は編集状態に反映される。
-X
シェルコマンドにバインドされているすべてのキーシーケンスと、関連するコマンドを、入力として再利用できる形式でリストアップする。
認識できないオプションが与えられるか、エラーが発生しない限り、戻り値は0である。
break [n]
for、while、until、selectループの中で終了する。 nが指定された場合、nレベルブレークする。nは1以上でなければならない。 nがループの数より大きい場合、すべてのループが終了する。 nが1以上でなければ、戻り値は0である。
builtin shell-builtin [arguments]
指定されたシェル組み込み関数に引数を渡して実行し、その終了ステータスを返す。これは、シェル組み込み関数と同じ名前の関数を定義し、関数内で組み込み関数の機能を保持する場合に便利である。 cd 組み込み関数は一般的にこの方法で再定義される。 shell-builtin がシェル組み込みコマンドでない場合、戻り値は false となる。
caller [expr]
アクティブなサブルーチン呼び出し(シェル関数、.または source 組み込み関数で実行されるスクリプト)のコンテキストを返す。 expr を指定しないと、呼び出し元は現在のサブルーチン呼び出しの行番号とソースファイル名を表示する。 exprとして負でない整数が指定された場合、呼び出し元は、現在の実行呼び出しスタックのその位置に対応する行番号、サブルーチン名、およびソースファイルを表示する。 この追加情報は、スタックトレースを表示する場合などに使用できる。 シェルがサブルーチン呼び出しを実行していないか、exprがコールスタックの有効な位置に対応していない場合を除き、戻り値は0である。
cd [-L|[-P [-e]] [-@]] [dir]
dirが与えられない場合、HOMEシェル変数の値が デフォルトとなる。 dirに続く追加の引数は無視される。 変数CDPATHは、dirを含むディレクトリの検索パスを定義する。 CDPATH内の代替ディレクトリ名は、コロン(:)で区切られる。 CDPATH内のディレクトリ名がNULLの場合、カレントディレクトリと同じ、つまり ``. dirがスラッシュ(/)で始まる場合、CDPATHは使われない。 -Pオプションをつけると、cdはdirを走査している間、dir中の...のインスタンスを処理する前にシンボリックリンクを解決して物理的なディレクトリ構造を使用するようになる(set組み込みコマンドの-Pオプションも参照のこと)。 .がdirに現れた場合、dirから直前のパス名コンポーネントを削除し、スラッシュまたはdirの先頭に戻して処理される。-Pとともに-eオプションが与えられ、ディレクトリ変更に成功した後にカレント作業ディレクトリを正しく決定できない場合、cdは失敗ステータスを返す。 これをサポートするシステムでは、-@オプションは、ファイルに関連する拡張属性をディレクトリとして表示する。 引数-は、ディレクトリの変更を試みる前に$OLDPWDに変換される。 CDPATHから空でないディレクトリ名が使用された場合、または - が最初の引数で、ディレクトリ変更が成功した場合、 新しい作業ディレクトリの絶対パス名が標準出力に書き出される。 戻り値は、ディレクトリの変更が成功した場合は真、そうでない場合は偽である。
command [-pVv] command [arg ...]
通常のシェル関数検索を抑制して、argsでコマンドを実行する。 組み込みコマンドまたは PATH で見つかったコマンドのみが実行される。 -pオプションが与えられると、標準ユーティリティがすべて見つかることが保証されているPATHのデフォルト値を用いてコマンドの検索が行われる。 -Vまたは-vオプションが与えられると、コマンドの説明が表示される。 -vオプションを指定すると、コマンドを呼び出すために使用されたコマンドまたはファイル名を示す単一の単語が表示される。 -Vまたは-vオプションが指定された場合、コマンドが見つかれば終了ステータスは0になり、見つからなければ1になる。 どちらのオプションも指定されず、エラーが発生したかコマンドが見つからなかった場合、終了ステータスは127となる。 それ以外の場合は、コマンド組み込み関数の終了ステータスが command の終了ステータスになる。
compgen [option] [word]
-pと-rを除く、complete組み込み関数が受け付けるどのオプションでもよい。 -F または -C オプションを使用する場合、プログラム可能な補完機能によって設定されるさまざまなシェル変数は使用可能であるが、有用な値を持たない。
マッチは、プログラマブル補完コードが同じフラグを持つ補完指定から直接生成したのと同じ方法で生成される。 wordが指定された場合、wordにマッチする補完のみが表示される。
無効なオプションが与えられるか、マッチが生成されない限り、戻り値は真である。
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 ...]
各名前に対する引数をどのように補完するかを指定する。 -pオプションが与えられている場合、またはオプションが与えられていない場合、既存の補完指定が入力として再利用できるような形で出力される。 rオプションは、各名前の補完指定を削除し、名前が与えられていない場合は、すべての補完指定を削除する。 -Dオプションは、他のオプションやアクションが``defaultコマンドの 補完に適用されることを示す。 -Eオプションは他のオプションやアクションが``emptyコマンド補完に適用されることを示す。 -Iオプションは、他のオプションやアクションが、その行の最初の非割り当ての単語、またはコマンドの区切り文字(;や|など)の後の補完に適用されることを示す。 複数のオプションが指定された場合、-Dオプションは-Eよりも優先され、両者は-Iよりも優先される。 -D、-E、-Iのいずれかを指定すると、他の名前引数は無視される。
これらの補完は、オプションで指定された場合にのみ適用される。単語補完が試みられたときにこれらの補完指定を適用する処理については、上記の「プログラム可能な補完」で説明されている。
その他のオプションが指定されている場合は、以下の意味を持つ。 G、-W、-Xオプションの引数(必要であれば-Pと-Sオプションも) は、組み込み関数が起動する前に展開されないように引用符で囲む。
-o comp-option
comp-optionは、単純な補完の生成だけでなく、compspecの動作のいくつかの側面を制御する:
bashdefault
compspecがマッチを生成しなかった場合、残りのデフォルトのbash補完を実行する。
default
compspecがマッチを生成しない場合、readlineのデフォルトのファイル名補完を使用する。
dirnames
compspecがマッチを生成しない場合、ディレクトリ名の補完を行う。
filenames
readlineに、compspecがファイル名を生成することを伝え、ファイル名固有の処理(ディレクトリ名にスラッシュを追加したり、特殊文字を引用したり、末尾の空白を抑えたり)を実行できるようにする。 シェル関数と一緒に使うことを意図している。
noquote
readlineに、完了した単語がファイル名の場合は引用しないように指示する(ファイル名を引用するのがデフォルト)。
nosort
readlineに、補完可能リストをアルファベット順に並べ替えないように指示する。
nospace
readlineに、行末で完了した単語にスペース(デフォルト)を追加しないように指示する。
plusdirs
compspecで定義されたマッチが生成された後、ディレクトリ名の補完が試みられ、マッチしたものは他のアクションの結果に追加される。
-A action
アクションは以下のいずれかであり、可能性のある完了のリストを生成する:
alias
エイリアス名。 -aとして指定することもできる。
arrayvar
配列変数名。
binding
キーバインディング名を読み込む。
builtin
シェル組み込みコマンドの名前。 -bとしても指定できる。
command
コマンド名。 -cとしても指定できる。
directory
ディレクトリ名。 dとしても指定できる。
disabled
無効化されたシェルビルトインの名前。
enabled
使用可能なシェルビルトインの名前。
export
エクスポートされるシェル変数の名前。 -e として指定することもできる。
file
ファイル名。 -fを指定することもできる。
function
シェル関数の名前。
group
グループ名。 -gとしても指定できる。
helptopic
helpビルトインが受け付けるヘルプトピック。
hostname
HOSTFILEシェル変数で指定されたファイルから取られたホスト名。
job
ジョブ制御が有効な場合は、ジョブ名。 -jとしても指定できる。
keyword
シェル予約語。 -kとしても指定できる。
running
ジョブ制御が有効な場合、実行中のジョブの名前。
service
サービス名。 -sとしても指定できる。
setopt
set 組み込み関数に対する -o オプションの有効な引数。
shopt
shopt 組み込み関数が受け付けるシェルオプション名。
signal
シグナルの名前。
stopped
ジョブ制御が有効な場合、停止しているジョブの名前。
user
ユーザー名。 -uとしても指定できる。
variable
すべてのシェル変数の名前。 v として指定することもできる。
-C command
コマンドはサブシェル環境で実行され、その出力が可能な補完として使われる。
-F function
シェル関数関数は、現在のシェル環境で実行される。 この関数が実行されると、第1引数($1)は補完される引数のコマンド名、第2引数($2)は補完される単語、第3引数($3)は現在のコマンド行で補完される単語の前の単語である。 終了すると、COMPREPLY配列変数の値から可能な補完が検索される。
-G globpat
パス名展開パターンglobpatが展開され、可能な補完が生成される。
-P prefix
接頭辞は、他のすべてのオプションが適用された後、各完了候補の先頭に追加される。
-S suffix
サフィックスは、他のすべてのオプションが適用された後、各完了可能なものに付加される。
-W wordlist
ワードリストは特殊変数IFSの文字を区切り文字として分割され、各単語が展開される。 単語の中にシェルのメタ文字やIFSの値に含まれる文字があってもよいように、単語リスト内ではシェル引用符で囲む。 可能な補完は、補完される単語にマッチする結果リストのメンバーである。
-X filterpat
filterpatはパス名展開に使われるパターンである。 これは、直前のオプションと引数で生成された補完候補のリストに適用され、 filterpatにマッチする補完がリストから取り除かれる。 filterpat の先頭の ! はパターンを否定する。この場合、 filterpat にマッチしない補完はすべて取り除かれる。
無効なオプションが指定された場合、-pまたは-r以外のオプションが name引数なしで指定された場合、指定が存在しない名前の補完指定を削除しようとした場合、または補完指定の追加エラーが発生した場合を除き、戻り値は真である。
compopt [-o option] [-DEI] [+o option] [name]
オプションにしたがって各名称の補完オプションを変更するか、名前が与えられていない場合は現在実行中の補完オプションを変更する。 オプションが与えられない場合は、各名前または現在実行中の補完の補完オプションを表示する。 optionに指定できる値は、前述の完全組み込み関数で有効な値である。 Dオプションは、他のオプションが ``デフォルト コマンド補完に適用されることを示す。 Eオプションは、他のオプションが``emptyコマンド補完に適用される ことを示す。 Iオプションは、他のオプションが、その行の最初の非割り当ての単語、またはコマンドの区切り文字である;や|の後の補完に適用されることを示す。
無効なオプションが与えられるか、補完指定が存在しない名前のオプションを変更しようとするか、出力エラーが発生しない限り、戻り値は真である。
continue [n]
for、while、until、またはselectループの次の反復を再開する。 nが指定された場合、n番目のループで再開する。 nがループの数より大きい場合、最後のループ(``トップレベルループ)が再開される。nが1以上でなければ、戻り値は0である。
declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
typeset [-aAfFgiIlnrtux] [-p] [name[=value] ...]
変数を宣言したり、属性を与えたりする。 名前が与えられていない場合は、変数の値を表示する。 -pオプションは、それぞれの名前の属性と値を表示する。-pが名前引数とともに使われた場合、-fと-F以外の追加オプションは無視される。 名前引数なしで -p を指定すると、追加オプションで指定された属性を持つすべての変数の属性と値が表示される。 他のオプションが -p とともに与えられない場合、 declare はすべてのシェル変数の属性と値を表示する。 -f オプションは、表示をシェル関数に限定する。 -F オプションは関数定義の表示を禁止し、関数名と属性のみが表示される。 shoptを使用してextdebugシェル・オプションを有効にすると、各名称が定義されているソース・ファイル名と行番号も表示される。 -F オプションは -f を意味する。 gオプションは、declareがシェル関数の中で実行された場合でも、変数をグローバル・スコープで作成または変更することを強制する。 それ以外の場合は無視される。 -Iオプションは、ローカル変数の属性(nameref属性を除く)と値を、周囲のスコープに存在する同名の変数に継承させる。 既存の変数がない場合、ローカル変数は初期状態で設定されない。 以下のオプションを使うと、指定した属性を持つ変数に出力を制限したり、変数に属性を与えたりすることができる:
-a
各名称はインデックス付き配列変数である(上記の「Arrays 」を参照)。
-A
それぞれの名前は連想配列変数である(上記の「Arrays 」を参照)。
-f
関数名のみを使用する。
-i
変数は整数として扱われ、変数に値が代入されると算術評価(上記のARITHMETIC EVALUATIONを参照)が行われる。
-l
変数に値が代入されると、大文字はすべて小文字に変換される。 大文字属性は無効になる。
-n
それぞれのnameにnameref属性を与え、別の変数への名前参照とする。 その別の変数は name の値によって定義される。 nameに対するすべての参照、代入、属性の変更は、-n属性そのものを使用または変更するものを除き、nameの値によって参照される変数に対して実行される。 nameref属性は配列変数には適用できない。
-r
名前を読み取り専用にする。 これらの名前は、その後の代入文やアンセットによって値を代入することはできない。
-t
それぞれの名前に trace 属性を与える。 トレースされた関数は、呼び出し元のシェルから DEBUG と RETURN トラップを継承する。 trace 属性は変数に対して特別な意味を持たない。
-u
変数に値が代入されると、小文字はすべて大文字に変換される。 小文字属性は無効になる。
-x
環境を通して後続のコマンドにエクスポートする名前をマークする。
ただし、+aや+Aは配列変数を破棄するのに使ってはならず、+rはreadonly属性を削除しない。 関数内で使用する場合、-gオプションが与えられていない限り、declareとtypesetはlocalコマンドと同様に各変数名をローカルにする。 変数名の後に=valueが続くと、その変数の値がvalueに設定される。 -a または -A と複合代入構文を使用して配列変数を作成する場合、追加の属性はそれ以降の代入まで有効にならない。 無効なオプションに出会った場合、``-f foo=barを使って関数を定義しようとした場合、 読み取り専用変数に値を代入しようとした場合、複合代入構文を使わずに配列変数に 値を代入しようとした場合(上記の配列を参照)を除いて、戻り値は0である、 名前のいずれかが有効なシェル変数名でない、読み取り専用変数の読み取りステータスをオフにしようとした、配列変数の配列ステータスをオフにしようとした、存在しない関数を -f で表示しようとした。
dirs [-clpv] [+n] [-n]
オプションなしで、現在記憶しているディレクトリのリストを表示する。 デフォルトでは、ディレクトリ名をスペースで区切って1行で表示する。 ディレクトリは pushd コマンドでリストに追加され、 popd コマンドはリストからエントリを削除する。 カレント・ディレクトリは常にスタックの最初のディレクトリである。
-c
すべてのエントリを削除してディレクトリスタックをクリアする。
-l
デフォルトのリスト形式では、ホームディレクトリを示すためにチルダを使用する。
-p
ディレクトリスタックを1行1エントリで表示する。
-v
各エントリの先頭にスタック内のインデックスを付けて、1行に1エントリずつディレクトリスタックを表示する。
+n
オプションなしで起動した場合、dirsが表示するリストの左から数えてn番目のエントリーを、ゼロから順に表示する。
-n
オプションなしで起動した場合、dirsが表示するリストの右から数えてn番目のエントリーを、ゼロから順に表示する。
無効なオプションが与えられるか、n個のインデックスがディレクトリスタッ クの末尾を超えない限り、戻り値は0である。
disown [-ar] [-h] [jobspec ... | pid ... ]
オプションを指定しない場合、アクティブなジョブのテーブルから各 jobspec を削除する。 jobspec が存在せず、-a オプションも -r オプションも与えられない場合、 現在のジョブが使用される。 h オプションが指定された場合、各 jobspec はテーブルから削除されないが、 シェルが SIGHUP を受信してもそのジョブに SIGHUP が送られないようにマークされる。 jobspec が与えられない場合、-a オプションはすべてのジョブを削除またはマークすることを意味する。jobspec 引数なしの -r オプションは、実行中のジョブに操作を制限する。 jobspec が有効なジョブを指定しない限り、戻り値は 0 である。
echo [-neE] [arg ...]
空白で区切られた引数を出力し、その後に改行する。 書き込みエラーが発生しない限り、リターン・ステータスは0である。 nを指定すると、末尾の改行が抑制される。 eオプションを指定すると、以下のバックスラッシュ・エスケープ文字の解釈が有効になる。 Eオプションを指定すると、これらのエスケープ文字がデフォルトで解釈されるシステムでも、その解釈を無効にする。 xpg_echo シェルオプションを使用すると、echo がデフォルトでこれらのエスケープ文字を展開するかどうかを動的に決定することができる。 echo は -- をオプションの終わりと解釈しない:
\a
アラート (ベル)
\b
バックスペース
\c
それ以上の出力を抑制する
\e
\E
エスケープキャラクター
\f
フォームフィード
\n
改行
\r
キャリッジリターン
\t
水平タブ
\v
垂直タブ
\\
バックスラッシュ
\0nnn
値が8進数値nnn(0~3桁の8進数)である8ビット文字
\xHH
値が16進数HH(1桁または2桁の16進数)である8ビット文字
\uHHHH
ユニコード(ISO/IEC 10646)文字で、その値は16進数値HHHH(1桁から4桁の16進数)である。
\UHHHHHHHH
ユニコード(ISO/IEC 10646)文字で、その値が16進数のHHHHHHHHH(1~8桁の16進数)である。
enable [-a] [-dnps] [-f filename] [name ...]
シェル組み込みコマンドを有効/無効にする。 組み込みコマンドを無効にすると、シェルは通常ディスクコマンドの前に組み込みコマンドを検索するにもかかわらず、シェル組み込みコマンドと同じ名前のディスクコマンドをフルパス名を指定せずに実行できるようになる。 n を使用すると、各名称は無効になり、それ以外の場合は有効になる。 例えば、シェルのビルトインバージョンの代わりに PATH 経由で見つかった test バイナリを使うには、``enable -n test を実行する。fオプションは、動的ロードをサポートしているシステムでは、共有オブジェクトファイル名から新しい組み込みコマンド名をロードすることを意味する。 dオプションは-fでロードした組み込みコマンドを削除する。 name 引数が与えられないか、または -p オプションが与えられると、 シェル組み込みコマンドのリストが表示される。 他のオプション引数を指定しない場合、リストは有効なシェル組み込み関数すべてから構成される。 n を指定すると、無効な組み込み関数だけが表示される。 a を指定すると、すべての組み込み関数が出力され、それぞれが有効かどうかも表示される。 s を指定すると、出力は POSIX 特殊組み込み関数に制限される。 戻り値は、名前がシェル組み込み関数でないか、共有オブジェクトからの新規組み込み関数のロードにエラーがない限り 0 である。
eval [arg ...]
引数が読み込まれ、1つのコマンドに連結される。 このコマンドはシェルによって読み込まれ実行され、その終了ステータスがevalの値として返される。 引数がない場合、あるいはnullの引数しかない場合、evalは0を返す。
exec [-cl] [-a name] [command [arguments]]
commandが指定された場合、シェルを置き換える。 新しいプロセスは作られない。 引数は command の引数になる。 l オプションが与えられた場合、シェルは command に渡された引数の 0 番目の先頭にダッシュを置く。 これは login(1) が行うことである。 c オプションを指定すると、コマンドは空の環境で実行される。 a が与えられると、シェルは実行されるコマンドの 0 番目の引数として name を渡す。 何らかの理由でコマンドが実行できなかった場合、execfail シェルオプションが有効になっていない限り、非対話型シェルは終了する。 その場合は失敗を返す。 ファイルを実行できない場合、対話型シェルは失敗を返す。 サブシェルは、execが失敗すると無条件に終了する。 commandが指定されていない場合、リダイレクトは現在のシェルで有効になり、リターン・ステータスは0になる。リダイレクト・エラーがある場合、リターン・ステータスは1になる。
exit [n]
nが省略された場合、終了ステータスは最後に実行されたコマンドのステータスとなる。 EXIT のトラップは、シェルが終了する前に実行される。
export [-fn] [name[=word]] ...
export -p
指定された名前は、その後に実行されるコマンドの環境に自動的にエクスポートされるようにマークされる。 -fオプションが指定された場合、名前は関数を参照する。 名前が指定されない場合、または -p オプションが指定された場合は、エクスポートされたすべての変数名のリストが表示される。 -n オプションを指定すると、各名称からエクスポート・プロパティが削除される。 変数名の後に=wordが続くと、その変数の値がwordに設定される。exportは、無効なオプションに遭遇するか、名前の1つが有効なシェル変数名でないか、-fに関数でない名前が指定されない限り、終了ステータス0を返す。
fc [-e ename] [-lnr] [first] [last]
fc -s [pat=rep] [cmd]
最初の形式は、履歴リストから最初のコマンドから最後のコマンドまでの範囲を選択し、それらを表示または編集して再実行する。 firstとlastは、文字列(その文字列で始まる最後のコマンドを探す)または数値(履歴リストへのインデックス、負の数は現在のコマンド番号からのオフセットとして使われる)で指定することができる。リストを表示する場合、firstまたはlastに0を指定すると-1となり、-0を指定すると現在のコマンド(通常はfcコマンド)となる。 もしlastが指定されなければ、リストアップのために現在のコマンドに設定され (``fc -l -10 は最後の10個のコマンドを表示する)、そうでなければfirstに設定される。 もしfirstが指定されなければ、編集の場合は前のコマンドに、リストアップの場合は-16に設定される。
-nオプションは、一覧表示時にコマンド番号を表示しない。 -rオプションはコマンドの順序を逆にする。 -lオプションを指定すると、コマンドは標準出力にリストされる。 それ以外の場合、enameで指定されたエディタが、それらのコマンドを含む ファイルに対して起動される。enameが与えられていない場合、変数FCEDITの値が使われ、 FCEDITが設定されていない場合、EDITORの値が使われる。 どちらの変数も設定されていなければ、viが使われる。 編集が完了すると、編集されたコマンドがエコーされて実行される。
第二の形式では、patの各インスタンスがrepに置き換えられた後、コマンドが再実行される。コマンドは上記の最初のものと同じように解釈される。 r="fc-s"」と入力すると、「cc」で始まる最後のコマンドが実行され、「r」と入力すると最後のコマンドが再実行される。
最初の形式を使用した場合、無効なオプションに遭遇するか、最初または最後の指定行が範囲外でない限り、戻り値は0である。 eオプションが与えられた場合、戻り値は最後に実行されたコマンドの値か、コマンドの一時ファイルでエラーが発生した場合は失敗となる。 2番目の形式が使われた場合、cmdが有効なヒストリ行を指定しない限り、戻り値は再実行されたコマンドのステータスとなり、その場合fcは失敗を返す。
fg [jobspec]
jobspec をフォアグラウンドで再開し、現在のジョブにする。 jobspec が存在しない場合、シェルの現在のジョブの概念が使用される。 戻り値は、フォアグラウンドに配置されたコマンドの値であり、ジョブ制御が無効なときに実行された場合は失敗となる。ジョブ制御が有効なときに実行された場合は、jobspecが有効なジョブを指定していないか、ジョブ制御なしで開始されたジョブを指定している。
getopts optstring name [arg ...]
optstringには、認識すべきオプション文字が含まれる。ある文字の後にコロンが続く場合、そのオプションは引数を持つことが期待され、その引数は空白で区切らなければならない。 コロンとクエスチョンマークはオプション文字としては使えない。 getoptsは起動されるたびに、次のオプションをシェル変数nameに入れ、nameが存在しない場合は初期化し、次に処理される引数のインデックスを変数OPTINDに入れる。 OPTINDは、シェルまたはシェルスクリプトが起動されるたびに1に初期化される。オプションが引数を必要とする場合、getopts はその引数を変数 OPTARG に入れる。 シェルは OPTIND を自動的にリセットしないので、新しいパラメータセットを使用する場合は、同じシェル呼び出し内で getopts を複数回呼び出す間に手動でリセットする必要がある。
オプションの終了に遭遇すると、getoptsは0より大きい戻り値で終了する。 OPTINDには、最初の非オプション引数のインデックスが設定され、 nameには?をセットする。
getoptsは通常、位置パラメータを解析するが、arg値としてさらに引数が与えられると、getoptsはそれらを代わりに解析する。
getoptsは2つの方法でエラーを報告することができる。 optstringの最初の文字がコロンの場合、サイレントエラー報告が使用される。 通常の操作では、無効なオプションやオプション引数の欠落に遭遇すると、診断メッセージが表示される。 変数 OPTERR を 0 に設定すると、optstring の最初の文字がコロンでなくても、エラーメッセージは表示されない。
無効なオプションが見つかった場合、getopts は name に ? を入れ、無音でなければエラーメッセージを表示して OPTARG の設定を解除する。 getopts が沈黙している場合、見つかったオプション文字は OPTARG に置かれ、診断メッセージは出力されない。
必須引数が見つからず、getoptsがサイレントでない場合、nameにクエスチョンマーク(?) getoptsが無音の場合、nameにコロン(:)が置かれ、OPTARGには見つかったオプション文字が設定される。
getoptsは、指定または未指定のオプションが見つかれば真を返す。 オプションの末尾にぶつかったり、エラーが発生した場合は偽を返す。
hash [-lr] [-p filename] [-dt] [name]
hashが起動されるたびに、コマンド名のフルパス名が$PATH内のディレクトリを検索して決定され、記憶される。 以前に記憶されたパス名は破棄される。 -pオプションが与えられると、パス検索は行われず、 filenameがコマンドの完全なファイル名として使われる。 -rオプションを付けると、シェルは記憶していた場所をすべて忘れる。 -dオプションを指定すると、シェルは各名称の記憶された場所を忘れる。 -t オプションを指定すると、各名前が対応する完全なパス名が表示される。 複数の name 引数が -t とともに与えられた場合、 name はハッシュされたフルパス名の前に出力される。 -lオプションを指定すると、入力として再利用できる形式で出力が表示される。 引数が与えられないか、-lだけが与えられると、記憶されたコマンドに関する情報が表示される。 名前が見つからないか、無効なオプションが与えられない限り、戻り値は真である。
help [-dms] [pattern]
組み込みコマンドに関する有用な情報を表示する。 pattern が指定されていれば、help は pattern にマッチするすべてのコマンドに関する詳細なヘルプを表示する。そうでなければ、すべての組み込みコマンドとシェル制御構造に関するヘルプを表示する。
-d
各パターンの簡単な説明を表示する
-m
各パターンの説明をマンページのような形式で表示する
-s
各パターンについて、短い使用法の概要のみを表示する
パターンにマッチするコマンドがなければ、リターンステータスは0である。
history [n]
history -c
history -d offset
history -d start-end
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]
オプションなしで、コマンド履歴リストを行番号付きで表示する。 の付いた行は変更されている。 引数 n は、最後の n 行だけをリストする。 シェル変数 HISTTIMEFORMAT が NULL ではなく設定されている場合、 strftime(3) のフォーマット文字列として使用され、 表示された各履歴エントリに関連付けられたタイムスタンプが表示される。 フォーマットされたタイムスタンプと履歴行の間には、空白は表示されない。 filename が指定された場合、それが履歴ファイル名として使用される。オプションが与えられた場合、以下の意味を持つ:
-c
すべてのエントリーを削除して履歴リストを消去する。
-d offset
位置 offset のヒストリエントリを削除する。 offsetが負の場合、最後のヒストリ位置より1つ大きい位置からの相対値として解釈されるため、負のインデックスはヒストリの終わりからさかのぼってカウントされ、-1のインデックスは現在のヒストリ-dコマンドを指す。
-d start-end
開始位置と終了位置の間の履歴エントリを削除する。 startとendの正の値と負の値は、上記のように解釈される。
-a
新しいヒストリ行をヒストリファイルに追加する。 これらの行は現在のbashセッションの開始以降に入力されたヒストリで、まだヒストリファイルに追加されていない行である。
-n
ヒストリファイルからまだ読み込まれていないヒストリ行を現在のヒストリリストに読み込む。 これらは、現在のbashセッションの開始以降にヒストリファイルに追加された行である。
-r
履歴ファイルの内容を読み込み、現在の履歴リストに追加する。
-w
現在の履歴リストを履歴ファイルに書き込み、履歴ファイルの内容を上書きする。
-p
以下の引数に対してヒストリ置換を行い、結果を標準出力に表示する。 ヒストリリストには結果を保存しない。 通常のヒストリ展開を無効にするには、各argを引用符で囲む必要がある。
-s
履歴リストに引数を1つのエントリーとして保存する。 履歴リストの最後のコマンドは、引数が追加される前に削除される。
HISTTIMEFORMAT変数が設定されている場合、各履歴エントリーに関連するタイムスタンプ情報は、履歴コメント文字でマークされた履歴ファイルに書き込まれる。ヒストリファイルが読み込まれると、ヒストリコメント文字の直後に数字が続く行は、次のヒストリエントリのタイムスタンプとして解釈される。 無効なオプションに遭遇するか、ヒストリファイルの読み込みまたは書き込み中にエラーが発生するか、-dの引数として無効なオフセットが与えられるか、-pの引数として与えられたヒストリ展開が失敗しない限り、戻り値は0である。
jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]
最初のフォームは、アクティブなジョブの一覧を表示する。 オプションの意味は以下の通りである:
-l
通常の情報に加えて、プロセスIDをリストアップする。
-n
ユーザーが最後にステータスを通知されてからステータスが変更されたジョブに関する情報のみを表示する。
-p
ジョブのプロセスグループリーダーのプロセスIDのみをリストする。
-r
実行中のジョブのみを表示する。
-s
停止したジョブのみを表示する。
jobspec が与えられた場合、出力はそのジョブに関する情報に制限される。 無効なオプションに遭遇するか、無効なjobspecが与えられない限り、戻りステータスは0である。
-xオプションが与えられた場合、jobsはcommandまたはargsで見つかったjobspecを対応するプロセスグループIDに置き換え、argsを渡してコマンドを実行し、その終了ステータスを返す。
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l|-L [sigspec | exit_status]
sigspec は SIGKILL のような大文字小文字を区別しないシグナル名 (SIG 接頭辞の有無は問わない) かシグナル番号であり、 signum はシグナル番号である。 sigspecが存在しない場合は、SIGTERMが想定される。 引数 -l は、シグナル名の一覧を示す。 lを指定する際に引数が指定された場合、引数に対応するシグナル名が列挙され、 戻りステータスは0となる。-lの引数exit_statusは、シグナル番号またはシグナルによって 終了したプロセスの終了ステータスを指定する数値である。 killは、少なくとも1つのシグナルが正常に送信された場合は真を返し、 エラーが発生した場合や無効なオプションに遭遇した場合は偽を返す。
let arg [arg ...]
各argは評価される算術式である(上記のARITHMETIC EVALUATION を参照)。最後のargが0と評価された場合、letは1を返し、そうでない場合は0が返される。
local [option] [name[=value] ... | - ]
各引数に対して、nameという名前のローカル変数が作成され、値が代入される。 オプションは、declareが受け付けるオプションのいずれかである。 localが関数内で使われると、変数名はその関数とその子関数に限定された可視スコープを持つようになる。 nameが-である場合、シェルオプションのセットは、localが呼び出された関数のローカルになる。関数内でset組み込み関数を使って変更されたシェルオプションは、関数が戻ったときに元の値に復元される。 このリストアは、あたかも一連のsetコマンドを実行して、関数を実行する前の値をリストアしたかのように行われる。 オペランドがない場合、localはローカル変数のリストを標準出力に書き出す。 関数内以外でlocalを使用するのはエラーである。 localが関数外で使用されているか、無効な名前が与えられているか、nameが読み取り専用変数でない限り、戻りステータスは0である。
logout
ログインシェルを終了する。
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]
標準入力からインデックス付き配列変数arrayに、または-uオプションが与えられている場合はファイルディスクリプタfdから行を読み込む。 変数MAPFILEはデフォルトの配列である。 オプションが与えられた場合の意味は以下の通りである。:
-d
delimの最初の文字は、改行ではなく、各入力行を終了するために使われる。 delimが空文字列の場合、mapfileはNUL文字を読んだ時点で行を終了する。
-n
最大で count 行コピーする。 countが0の場合、すべての行がコピーされる。
-O
インデックスを原点として配列への代入を開始する。 デフォルトのインデックスは0である。
-s
最初に読んだカウント行は破棄する。
-t
読み込んだ各行から末尾の区切り文字(デフォルトは改行)を取り除く。
-u
標準入力の代わりにファイル・ディスクリプタfdから行を読む。
-C
量子行が読み込まれるたびにコールバックを評価する。 -cオプションで量子を指定する。
-c
コールバックを呼び出すたびに読み込む行数を指定する。
-cを指定せずに-Cを指定した場合、デフォルトの量子は5000である。 callbackが評価されるとき、追加引数として、次に代入される配列要素のインデックスと、その要素に代入される行が与えられる。
明示的に原点が与えられない場合、mapfileはその原点に代入する前に配列をクリアする。
mapfileは、無効なオプションやオプション引数が与えられていないか、配列が無効か割り当て不可能でないか、配列がインデックス付き配列でない場合を除き、正常に戻る。
popd [-n] [+n] [-n]
ディレクトリスタックからエントリを削除する。 引数がない場合、スタックからトップディレクトリを削除し、新しいトップディレクトリへの cd を実行する。 引数が与えられた場合、以下の意味を持つ。:
-n
スタックからディレクトリを削除する際に、通常のディレクトリの変更を抑制し、スタックのみが操作されるようにする。
+n
dirs で示されるリストの左から 0 から数えて n 番目のエントリを削除する。 例えば: ``popd +0 は最初のディレクトリを削除し、 ``popd +1 は2番目のディレクトリを削除する。
-n
dirs で示されるリストの右から 0 から数えて n 番目のエントリを削除する。 例えば、 ``popd -0 は最後のディレクトリを削除し、 ``popd -1 はその次を削除する。
popdコマンドが成功した場合、dirsも実行され、戻りステータスは0である。無効なオプションに遭遇した場合、ディレクトリスタックが空である場合、存在しないディレクトリスタックエントリが指定された場合、またはディレクトリの変更が失敗した場合、popdは偽を返す。
printf [-v var] format [arguments]
フォーマットされた引数を、フォーマットの制御下で標準出力に書き出す。 vオプションを付けると、出力は標準出力に出力されるのではなく、変数varに代入される。
すなわち、単純に標準出力にコピーされるプレーン文字、変換されて標準出力にコピーされる文字エスケープシーケンス、および次の連続する引数の印刷を引き起こす各フォーマット指定である。 標準のprintf(1)フォーマット指定に加えて、printfは以下の拡張を解釈する:
%b
printfは、echo -eと同じように、対応する引数のバックスラッシュ・エスケープ・シーケンスを展開する。
%q
printfは、対応する引数をシェル入力として再利用できる形式で出力する。
%(datefmt)T
strftime(3) のフォーマット文字列として datefmt を使用した結果の日付時刻文字列を printf に出力させる。 対応する引数は、エポックからの秒数を表す整数である。 2つの特別な引数値を使うことができる: -1 は現在時刻を表し、-2 はシェルが起動された時刻を表す。 引数が指定されない場合、変換は-1が与えられたかのように動作する。 これは、通常のprintfの動作の例外である。
b、%q、%Tディレクティブはすべて、書式指定のフィールド幅と精度の引数を使用し、拡張された引数からそのバイト数を書き込む(あるいは、その幅のフィールドを使用する)。
文字列以外の書式指定子への引数は、Cの定数として扱われる。ただし、先頭のプラス記号またはマイナス記号は許容され、先頭の文字がシングルクォートまたはダブルクォートの場合、値はそれに続く文字のASCII値となる。
書式は、すべての引数を消費するために必要に応じて再利用される。 その書式が,与えられた引数よりも多くの引数を必要とする場合,余分な書式指定は,適切な場合には,ゼロ値またはヌル文字列が与えられたかのように振る舞う。 戻り値は、成功した場合はゼロ、失敗した場合はゼロ以外である。
pushd [-n] [+n] [-n]
pushd [-n] [dir]
ディレクトリ・スタックの先頭にディレクトリを追加するか、スタックを回転させ、 新しいスタックの先頭を現在の作業ディレクトリにする。 引数がない場合、pushd はディレクトリスタックが空でない限り、上位 2 つのディレクトリを交換し、0 を返す。 引数が与えられた場合、以下の意味を持つ:
-n
スタックを回転したり、スタックにディレクトリを追加したりするときに、通常のディレクトリの変更を抑制し、スタックだけを操作するようにする。
+n
スタックを回転させ、n番目のディレクトリ(dirsで示されるリストの左から数えて、ゼロから始まる)が一番上に来るようにする。
-n
スタックを回転させ、n番目のディレクトリ(dirsで示されるリストの右から数えて、ゼロから始まる)が一番上に来るようにする。
dir
dirをディレクトリスタックの先頭に追加し、あたかもcd組み込み関数の引数として与えられたかのように、新しいカレント作業ディレクトリとする。
pushdコマンドが成功した場合、dirsも実行される。 最初の形式を使用した場合、dir への cd が失敗しない限り、pushd は 0 を返す。 2番目の形式では、ディレクトリ・スタックが空であるか、存在しないディレクトリ・スタック要素が指定されるか、指定された新しいカレント・ディレクトリへのディレクトリ変更が失敗しない限り、pushdは0を返す。
pwd [-LP]
現在の作業ディレクトリの絶対パス名を表示する。 Pオプションが指定されているか、set組み込みコマンドの -o物理オプションが有効になっている場合、出力されるパス名にはシンボリックリンクは含まれない。 Lオプションを使用すると、シンボリックリンクを含むパス名が出力される。 カレントディレクトリ名の読み込み中にエラーが発生するか、無効なオプションが指定されない限り、戻りステータスは 0 である。
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
標準入力、または-uオプションの引数として与えられたファイル・ディスクリプタfdから1行が読み込まれ、上記の「単語の分割」で説明したように単語に分割され、最初の単語が最初の名前に、2番目の単語が2番目の名前に、といった具合に割り当てられる。 単語が名前より多い場合は、残りの単語とその間の区切り文字が最後の名前に割り当てられる。 入力ストリームから読み込まれた単語の数が名前の数より少ない場合、残りの名前には空の値が割り当てられる。 IFSの文字は、シェルが展開に使用するのと同じ規則を使用して行を単語に分割する ために使用される(上記の「単語の分割」で説明)。 バックスラッシュ文字( \)は、次に読み込まれる文字と行の継続のための特別な意味を取り除くために使用される。 オプションが与えられた場合、以下の意味を持つ:
-a aname
新しい値が代入される前に、anameはアンセットされる。 他の名前引数は無視される。
-d delim
delimの最初の文字は、改行ではなく、入力行を終了するために使われる。 delimが空文字列の場合、readはNUL文字を読んだ時点で行を終了する。
-e
標準入力がターミナルからの場合、行を取得するためにreadline(上記のREADLINE を参照)が使用される。 Readlineは、現在の(または行編集が以前にアクティブでなかった場合はデフォルトの)編集設定を使用するが、Readlineのデフォルトのファイル名補完を使用する。
-i text
行の読み取りにreadlineが使われている場合、テキストは編集が始まる前に編集バッファに置かれる。
-n nchars
readは、入力の完全な行を待つのではなく、nchars文字を読んだ後に戻るが、区切り文字の前にnchars文字より少ない文字が読み込まれた場合は、区切り文字を尊重する。
-N nchars
readは、EOFに遭遇するかreadがタイムアウトしない限り、入力の完全な行を待つのではなく、正確にnchars文字を読んだ後に戻る。 入力中の区切り文字は特別に扱われず、nchars文字が読み込まれるまでreadが戻ることはない。 その意図は、読み込まれた文字がそのまま変数に代入されることである(バックスラッシュを除く。)
-p prompt
入力を読み込む前に、標準エラーにプロンプトを表示する。 プロンプトは、入力がターミナルから来た場合にのみ表示される。
-r
バックスラッシュはエスケープ文字としては機能しない。 バックスラッシュは行の一部とみなされる。 特に、バックスラッシュと改行のペアを行の続きとして使用してはならない。
-s
サイレントモード。 端末からの入力の場合、文字はエコーされない。
-t timeout
timeout秒以内に入力の完全な行(または指定された文字数)が読み込まれなかった場合、readをタイムアウトさせ、失敗を返すようにする。timeoutには、小数点以下の端数を含む10進数を指定することができる。 このオプションは、readがターミナル、パイプ、その他の特殊なファイルから入力を読み込む場合にのみ有効で、通常のファイルから読み込む場合には効果がない。 readがタイムアウトした場合、readは読み込んだ入力の一部を指定した変数名に保存する。 タイムアウトが0の場合、readはデータの読み込みを試みずに直ちに戻る。 終了ステータスは、指定されたファイル記述子で入力が利用可能であれば0、そうでなければ0以外である。 タイムアウトを超えると、終了ステータスは128より大きくなる。
-u fd
ファイルディスクリプタfdから入力を読み込む。
名前が与えられない場合、読み込まれた行は、終端デリミタなしで、それ以外は変更されずに、変数 REPLY に代入される。 終了ステータスは、ファイル終了に遭遇するか、読み込みがタイムアウトするか(この場合、ステータスは128より大きくなる)、変数代入エラー(読み取り専用変数への代入など)が発生するか、無効なファイル記述子が-uの引数として与えられない限り、0である。
readonly [-aAf] [-p] [name[=word] ...]
指定された名前には読み取り専用マークが付けられ、以後の代入によってこれらの名前の値が変更されることはない。-f オプションを指定すると、その名前に対応する関数がそのようにマークされる。 -aオプションは変数を添字配列に制限し、-Aオプションは変数を連想配列に制限する。 両方のオプションが指定された場合は、-Aが優先される。 name 引数が与えられていない場合、または -p オプションが与えられている場合は、すべての読み取り専用名のリストが表示される。 他のオプションを使って、出力を読み取り専用名のサブセットに制限することができる。 pオプションを指定すると、入力として再利用できる形式で出力が表示される。 変数名の後に=wordが続くと、その変数の値がwordに設定される。 無効なオプションに遭遇した場合、名前の1つが有効なシェル変数名でない場合、または -f に関数でない名前が指定された場合を除き、戻り値は 0 である。
return [n]
関数の実行を停止し、nで指定された値を呼び出し元に返す。 nが省略された場合、returnのステータスは、関数本体内で最後に実行されたコマンドのステータスとなる。return がトラップハンドラによって実行される場合、ステータスを決定するために使用される最後のコマンドは、トラップハンドラの前に実行された最後のコマンドである。 returnがDEBUGトラップ中に実行された場合、ステータスを決定するために使用される最後のコマンドは、returnが呼び出される前にトラップハンドラによって実行された最後のコマンドである。 returnが関数の外で、.(ソース)コマンドによるスクリプトの実行中に使用された場合、そのスクリプトの実行をシェルに停止させ、nまたはスクリプト内で最後に実行されたコマンドの終了ステータスのいずれかをスクリプトの終了ステータスとして返す。 n が指定された場合、戻り値はその最下位 8 ビットである。 returnに数値以外の引数が指定された場合、または.やsourceによるスクリプトの実行中ではなく関数の外部で使用された場合、戻り値は0以外のステータスになる。RETURNトラップに関連付けられたコマンドは、関数またはスクリプトの実行後に実行が再開される前に実行される。
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では「シェル互換性レベル」という概念が導入され、shopt組み込みのcompat31、compat32、compat40、compat41などに対するオプションのセットとして指定される。) 現在の互換性レベルは1つだけで、各オプションは相互に排他的である。 互換性レベルは、ユーザーが新しいバージョンと互換性のない旧バージョンの動作を選択できるようにするためのもので、スクリプトを移行して現在の機能と動作を使用できるようにするためのものである。これは一時的な解決策である。

このセクションでは、特定のバージョンで標準となっている動作については言及しない(例えば、compat32を設定することは、正規表現マッチング演算子のrhsを引用することで、単語内の特殊な正規表現文字を引用することを意味し、これはbash-3.2以上のデフォルトの動作である)。

ユーザーが例えばcompat32を有効にすると、現在の互換性レベルまでの他の互換性レベルの動作に影響を与える可能性がある。 各互換性レベルは、そのバージョンのbashで変更された動作を制御するが、その動作は以前のバージョンにもあったかもしれないという考え方である。 例えば、[[ コマンドでロケール・ベースの比較を使用するようになったのはbash-4.1からで、それ以前のバージョンではASCIIベースの比較を使っていたため、compat32を有効にするとASCIIベースの比較も有効になる。 そのため、compat32を有効にすると、ASCIIベースの比較も有効になる。この細かさは、すべての用途に十分とは限らないので、ユーザーは互換性レベルを慎重に使用すべきである。 現在の動作を知るには、特定の機能のドキュメントを読むこと。

Bash-4.3は新しいシェル変数を導入した: BASH_COMPATである。 この変数に代入される値(4.2のような10進数のバージョン番号、または42のようなcompatNNオプションに対応する整数)が互換性レベルを決定する。

bash-4.4から、Bashは古い互換性レベルを廃止し始めた。 最終的にはこのオプションは削除され、BASH_COMPATが使われるようになる。

Bash-5.0は、以前のバージョンに対する個別のshoptオプションが存在する最後のバージョンである。ユーザーはbash-5.0以降のバージョンでBASH_COMPATを使うべきである。

以下の表は、各互換性レベルの設定によって制御される動作の変更について説明したものである。 compatNNタグは、以下のメカニズムのいずれかを使用して互換性レベルをNNに設定するための省略記法として使用される。 bash-5.0より前のバージョンでは、対応するcompatNN shoptオプションを使用して互換性レベルを設定することができる。 bash-4.3およびそれ以降のバージョンでは、BASH_COMPAT変数を使用するのが望ましく、bash-5.1およびそれ以降のバージョンでは必須である。

compat31
  • コマンドの正規表現マッチング演算子(=~)のrhsを引用しても特別な効果はない。
compat32
  • "a ; b ; c "のようなコマンドリストに割り込むと、リスト内の次のコマンドが実行される(bash-4.0以降のバージョンでは、シェルは割り込みを受け取ったかのように動作するため、リスト内の1つのコマンドに割り込むと、リスト全体の実行が中断される)。
compat40
  • コマンドの < と > 演算子は、文字列を比較するときに現在のロケールを考慮しない。 bash-4.1以前のバージョンでは、ASCII照合順序とstrcmp(3)を使用する。bash-4.1以降では、現在のロケールの照合順序とstrcoll(3)を使用する。
compat41
  • posixモードでは、timeの後にオプションを付けても予約語として認識される(これはPOSIX解釈267)。
  • posix モードでは、パーサーは二重引用符で囲まれたパラメータ展開の単語部分に偶数の一重引用符があることを要求し、一重引用符内の文字が引用符で囲まれたとみなされるように、それらを特別に扱う(これは POSIX 解釈 221 である)。
compat42
  • 二重引用符で囲まれたパターン置換の置換文字列は、bash-4.2以降のバージョンでは引用符の削除を行わない。
  • posixモードでは、二重引用符で囲まれたパラメータ展開の単語部分を展開するとき、一重引用符は特別なものとみなされ、閉じ波括弧や他の特別な文字を引用するために使用できる(これはPOSIX解釈221の一部である)。
compat43
  • シェルは、引用符で囲まれた複合代入をdeclareの引数として使おうとしても警告メッセージを表示しない(declare -a foo='(1 2)')。後のバージョンでは、この使い方が非推奨であることを警告する
  • 単語展開エラーは、posixモードであっても、現在のコマンドを失敗させる非致命的エラーとみなされる(デフォルトの動作は、シェルを終了させる致命的エラーとなる)。
  • シェル関数を実行するとき、ループ状態(while/until/etc)はリセットされないため、その関数内でbreakやcontinueを行うと、呼び出し元のコンテキストでループが解除されたり継続されたりする。Bash-4.4以降では、ループ状態をリセットしてこれを防いでいる。
compat44
  • シェルがBASH_ARGVとBASH_ARGCで使用する値を設定し、拡張デバッグモードが有効になっていなくても、シェルの位置パラメーターに展開できるようにする。
  • サブシェルは親コンテキストからループを継承するため、breakやcontinueはサブシェルを終了させる。 Bash-5.0以降では、ループ状態をリセットして終了を防止する。
  • シェルがposixモードでなくても、exportやreadonlyのような属性を設定する組み込み関数に先行する変数代入は、呼び出し環境の同じ名前の変数に影響を与え続ける。
compat50
  • Bash-5.1では、$RANDOMの生成方法が変更され、若干ランダム性が増した。 シェルの互換性レベルが50以下に設定されている場合、bash-5.0とそれ以前のバージョンの方法に戻るので、RANDOMに値を代入して乱数ジェネレーターをシードすると、bash-5.0と同じシーケンスが生成される。
  • コマンド・ハッシュ・テーブルが空の場合、bash-5.1より前のバージョンのbashでは、入力として再利用できる出力を生成する場合でも、その旨の情報メッセージが表示された。Bash-5.1では、-lオプションが指定されると、このメッセージが表示されなくなる。

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