kazmax - Linux で自宅サーバー

bash - コマンド (プログラム) の説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 著作権
  4. 説明
  5. オプション
  6. 引き数
  7. 起動
  8. 定義
  9. 予約語
  10. シェルの文法
  11. コメント (COMMENTS)
  12. クォート
  13. パラメータ
  14. 展開
  15. リダイレクト
  16. エイリアス
  17. 関数
  18. 算術式評価
  19. 条件式
  20. 単純なコマンドの展開
  21. コマンドの実行
  22. コマンド実行環境
  23. 環境
  24. 終了ステータス
  25. シグナル
  26. ジョブ制御
  27. プロンプト
  28. READLINE ライブラリ
  29. 履歴 (HISTORY)
  30. 履歴の展開
  31. シェルの組み込みコマンド
  32. 制限付きのシェル(RESTRICTED SHELL)
  33. 関連項目
  34. ファイル
  35. 著者
  36. バグ報告
  37. バグ

名前

bash - GNU Bourne-Again SHell

書式

bash [options] [file]

著作権

Bash is Copyright (C) 1989-2001 by the Free Software Foundation, Inc.

説明

bash は、標準入力やファイルから読み込んだコマンドを実行する、 sh 互換のコマンド言語インタプリタです。 bash には、Korn シェルや C シェル (kshcsh ) の便利な機能も採り入れられています。

bash は IEEE POSIX Shell and Tools specification (IEEE Working Group 10032) に準拠する実装を目指しています。

オプション

bash は以下のオプションを起動時に解釈します (組み込みコマンド set の説明で述べられている 1 文字のシェルオプションも使えます):

-c string
-c オプションが指定されると、コマンドが string から読み込まれます。 string の後に引き数があれば、これらは 位置パラメータ (positional parameter: $0 からはじまるパラメータ) に代入されます。
-r
-r オプションが指定されると、 bash制限された状態 (restricted) となります (後述の 制限付きのシェル を参照)。
-i
-i オプションが指定されると、 bash対話的 (interactive) に動作します。
-s
-s オプションが指定された場合と、 オプションをすべて処理した後に引き数が残っていなかった場合には、 コマンドは標準入力から読み込まれます。 このオプションを使うと、 対話的シェルを起動するときに 位置パラメータを設定できます。
-D
二重引用符によるクォート文字列 (double-quoted strings) に $ が前置されたものを、全てリストして標準出力に出力します。 これらは、カレントロケールが C または POSIX 以外の時に、 翻訳の対象となるべき文字列です。 このオプションを指定すると、 自動的に -n オプションも指定されたことになります。 つまりコマンドは全く実行されません。
--
-- はオプションの終わりを示し、それ以降のオプション処理を行いません。 -- 以降の引き数は全て、ファイル名や引き数として扱われます。 引き数 --- と同じです。

bash が解釈するオプションには複数の文字からなるものもたくさんあります。 このようなオプションを認識させるためには、 コマンドライン中で 1 文字のオプションよりも前に置かなければなりません。

--dump-po-strings
-D と同じですが、 出力は GNU gettextpo (ポータブルオブジェクト) ファイル形式で行われます。
--dump-strings
-D と同じです。
--help
使用方法についてのメッセージを標準出力に表示し、正常終了します。
--init-file file
--rcfile file
対話的シェルとして起動された場合、 個人用の初期化ファイル ~/.bashrc の代わりに file からコマンドを実行します (後述の 起動 セクションを参照)。
--login
ログインシェル (後述の 起動 セクションを参照) として起動されたかのように bash を動作させます。
--noediting
シェルが対話的動作の場合、コマンドラインを読み込むときに GNU readline ライブラリを使用しません。
--noprofile
システム全体用の起動ファイル および個人用の初期化ファイル ~/.bash_profile , ~/.bash_login , ~/.profile のいずれも読み込みません。デフォルトでは、 bash はログインシェルとして起動された時に これらのファイルを読み込みます (後述の 起動 セクションを参照)。
--norc
シェルが対話的動作を行う場合に、個人用初期化ファイル ~/.bashrc の読み込み・実行を行いません。シェルが sh として起動された場合には、このオプションはデフォルトで有効になります。
--posix
bash の動作のうち、 デフォルトの振舞いが POSIX 1003.2 の標準と異なる部分を、 標準に適合するように変更します (posix モード )。
--restricted
シェルの動作を制限します (後述の 制限付きのシェル セクションを参照)。
--verbose
-v と同じです。
--version
実行された bash のバージョン情報を標準出力に表示し、正常終了します。

引き数

オプション処理の後に引き数が残っており、かつ -c オプションと -s オプションのいずれも指定されていない場合、 最初の引き数はファイル名とみなされ、 そのファイルにシェルコマンドが記述されているとみなされます。 このように bash が起動された場合、 $0 にそのファイルの名前が設定されます (残りの引き数は位置パラメータに設定されます)。 bash はこのファイルからコマンドの読み込みと実行を行い、そして終了します。 bash の終了ステータスは、 このスクリプト中で実行された最後のコマンドの終了ステータスになります。 コマンドが全く実行されなければ、終了ステータスは 0 です。

起動

ログインシェル(login shell) とは、0 番目の引き数の最初の文字が - であるシェル、または --login オプション付きで起動されたシェルのことです。

対話的な シェルとは、 オプションでない引数がなく、 標準入力と標準出力がいずれも端末に接続されていて (これは isatty (3)で調べられます)、 -c オプションが指定されていない状態で起動されたシェル、または -i オプション付きで起動されたシェルのことです。 bash が対話的に動作している場合には、 PS1 が設定され、 $-i が含まれます。 これを利用すると、対話的動作の状態であるかどうかを、 シェルスクリプトや起動ファイルの内部で調べられます。

以下の段落では、 bash がどのように起動ファイルを実行するかを説明します。 以下のファイルのいずれかが、 「存在しているが読み込みできない」場合は、 bash はエラーを報告します。ファイル名に含まれるチルダは、 後述の 展開 セクションにおける "チルダ展開" の項目で述べるように展開されます。

bash が対話的なログインシェルとして起動されるか、 --login オプション付きの非対話的シェルとして起動されると、 /etc/profile ファイルが存在すれば、 bash はまずここからコマンドを読み込んで実行します。 このファイルを読んだ後、 bash~/.bash_profile , ~/.bash_login , ~/.profile をこの 順番で探します。 bash は、この中で最初に見つかり、かつ読み込みが可能であるファイルから コマンドを読み込んで実行します。 --noprofile オプションを使ってシェルを起動すれば、 この動作を行わないようにできます。

ログインシェルが終了するときには、 ~/.bash_logout ファイルがあれば、 bash はこれを読み込んで実行します。

ログインシェルでない対話的シェルとして起動されると、 ~/.bashrc ファイルがあれば、 bash はここからコマンドを読み込み、実行します。 この動作は --norc オプションで行わないようにできます。 --rcfile file オプションを使うと、 コマンドの読み込みと実行を ~/.bashrc からでなく file から行わせることができます。

(例えばシェルスクリプトを実行するために) 非対話的に起動されると、 bash は環境変数 BASH_ENV を調べ、この変数が定義されていればその値を展開し、 得られた値をファイル名とみなして、 そこからコマンドの読み込みと実行を行います。 つまり bash は以下のコマンドが実行されたのと同じように動作します:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

ただし、ファイル名を探すために PATH 環境変数の値が使われることはありません。

sh という名前で bash を起動すると、 bash は古くからある sh の起動動作をできるだけ真似しようとします。 また POSIX 標準にもできるだけ従おうとします。 対話的なログインシェルとして起動されると、 あるいは --login オプション付きの非対話的シェルとして起動されると、 このシェルはまず /etc/profile~/.profile の順でコマンドの読み込みと実行をしようとします。 --noprofile オプションを使うと、この動作を行わないようにできます。 sh という名前の対話的シェルとして起動されると、 bash は環境変数 ENV を調べ、この変数が定義されていればその値を展開し、 展開で得た値をコマンドの読み込みと実行を行うためのファイル名として使います。 sh という名前で起動されたシェルは、 他の起動ファイルからコマンドの読み込みと起動を行うことはないので、 --rcfile オプションは全く効果を持ちません。 sh という名前の非対話的シェルとして起動されると、 このシェルは他の起動ファイルを何も読み込みません。 sh として起動された場合、 bash は起動ファイルの読み込みを行った後に POSIX モードに入ります。

--posix コマンドラインオプション等により bashPOSIX モードで起動されると、 bash は起動ファイルに関して POSIX 標準に従います。 このモードでは、対話的シェルは ENV 環境変数を展開し、 展開して得られた名前のファイルからコマンドの読み込みと実行を行います。 他の起動ファイルは全く読み込みません。

bash は、自分を起動したのがリモートシェルデーモン (通常は rshd ) かどうかを調べます。 rshd によって実行されていると bash が判断した場合、 ~/.bashrc が存在し、かつ読み込み可能であれば、 bash はコマンドをこのファイルから読み込んで実行します。 sh として呼び出された場合には、この動作は行いません。 --norc オプションを使えばこの動作を禁止できますし、 --rcfile オプションを使えば他のファイルを読ませるようにもできます。 しかし一般的には rshd は これらのオプションを付けてシェルを起動しませんし、 指定もできないようになっています。

シェルが実ユーザ (グループ) ID と異なる実効ユーザ (グループ) ID で起動され、 かつ -p オプションが与えられていない場合は、 起動ファイルは全く読み込まれず、シェル関数は環境から継承されず、 SHELLOPTS が環境変数に含まれていても無視され、 実効ユーザ ID には実ユーザ ID が設定されます。 -p オプションが起動時に与えられた場合、 起動時の動作は同じですが、 実効ユーザ ID は再設定されません。

定義

このドキュメントの残りの部分では、 以下の定義を使用します。

ブランク (blank)
空白文字またはタブ文字
単語 (word)
シェルが 1 単位とみなす文字並び。 トークン(token) とも言われます。
名前 (name)
英数字とアンダースコア文字だけから構成され、 かつ最初の文字が英字かアンダースコア文字である 単語識別子 (identifier) とも言われます。
メタ文字 (metacharacter)
クォートされていない場合に、単語区切りとなる文字。 以下の文字のうちのいずれかです:

| & ; ( ) < > スペース タブ

制御演算子
制御機能を持つトークン 。 以下のシンボルのうちのいずれかです:

|| & && ; ;; ( ) | <newline>

予約語

予約語 (reserved word) とはシェルにとって特別な意味を持つ単語です。 以下の単語がクォートされておらず、 かつ単純なコマンド (simple command) の 先頭の単語 (後述の シェルの文法 を参照) であるか、 case コマンドや for コマンドの 3 番目の単語である場合には、予約語として認識されます:

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

シェルの文法

単純なコマンド (Simple Commands)

単純なコマンド (simple command ) とは、 変数の代入を並べたもの (これは省略可能です) の後に、 ブランク区切りの単語とリダイレクションを記述し、 最後に制御演算子を置いたものです。 最初の単語は実行するコマンドを指定します。 残りの単語は起動されるコマンドに引き数として渡されます。

単純なコマンドの返り値はコマンドの終了コードですが、シグナル n を受けてコマンドが終了した場合には 128+n となります。

パイプライン (Pipeline)

パイプライン (pipeline) は、記号 | で区切った 1 つ以上のコマンド列です。 パイプラインのフォーマットを以下に示します:

[time [-p ]] [ ! ] command [ | command2 ... ]

command の標準出力は command2 の標準入力に接続されます。 この接続は、 コマンドで指定したどのリダイレクションよりも先に実行されます (後述の リダイレクション を参照)。

パイプラインの前に、予約語である ! がある場合、 そのパイプラインの終了ステータスは最後のコマンドの終了ステータスの論理値の NOT を取ったものになります。 それ以外の場合には、 パイプラインのステータスは最後のコマンドの終了ステータスになります。 値を返す前に、シェルはパイプライン中の全てのコマンドが終了するのを待ちます。

パイプラインの前に予約語 time がある場合、コマンドの実行にかかった 経過時間・ユーザ時間・システム時間がパイプラインの終了時に報告されます。 -p オプションを指定すると、 出力フォーマットが POSIX 仕様に変わります。 変数 TIMEFORMAT には、経過時間情報の表示の仕方を指定するフォーマット文字列を 設定できます (後述の シェル変数 の項の TIMEFORMAT に関する説明を参照)。

パイプライン中の各コマンドは、それぞれ別のプロセスとして (つまりサブシェル内で) 実行されます。

リスト

リスト (list) とは、1つ以上のパイプラインを演算子 ; , & , && , || のいずれかで区切って並べ、最後に ; , & , <newline> のいずれか (これは省略可能です) を置いたものです。

リスト演算子のうち、 &&|| の優先順位は同じです。これらの次に、 ;& が同じ優先順位で続きます。

コマンドが制御演算子 & で終わっている場合、シェルはコマンドをサブシェル内で バックグラウンド (background) で実行します。 シェルはコマンドが終了するのを待たずに、返却ステータス 0 を返します。 コマンドを ; で区切った場合には、これらは順番に実行されます。 シェルはそれぞれのコマンドが終了するのを順番に待ちます。 返却ステータスは、最後に実行したコマンドの終了ステータスになります。

制御演算子 && は AND リストを示し、 || は OR リストを示します。 AND リストは

command1 && command2

という形式であり、 command1 が終了ステータス 0 を返した場合に限り command2 が実行されます。

OR リストは

command1 || command2


という形式であり、 command1 が 0 以外の終了ステータスを返した場合に限り command2 が実行されます。AND リストと OR リストの返却ステータスは、 リスト中で最後に実行されたコマンドの終了ステータスです。

複合コマンド(Compound Commands)

複合コマンド (compound command) を以下に示します:

(list )
list はサブシェル内で実行されます。 シェルの環境に影響を与えるような変数の代入や組み込みコマンドは、 コマンドの終了後に影響を残しません。 返却ステータスは list の終了ステータスです。
{ list ; }
list が単に現在のシェル環境で実行されます。 list の最後は改行文字かセミコロンでなければなりません。これは グループコマンド(group command) と呼ばれます。返却ステータスは list の終了ステータスです。
((expression ))
expression が後述の 算術式評価 で説明される規則に従って評価されます。 式の値が 0 でない場合、返却ステータスは 0 になります。そうでない場合、 返されるステータスは 1 になります。これは let "expression " と全く同じものです。
条件式 expression の評価値に従って 0 または 1 を返します。 式は後述の 条件式 で説明する、プライマリによって構成されます。 単語分割とパス名展開は の間の単語に対しては行われません。 チルダ展開、パラメータと変数の展開、算術式展開、コマンド置換、 プロセス置換、クォート除去は実行されます。
== 演算子と != 演算子が使われたとき、 演算子の右の文字列はパターンと解釈され、 後述のパターンマッチング で説明する規則に従ってマッチングが行われます。 文字列がパターンにマッチすれば返り値は 0 であり、 マッチしなければ返り値は 1 になります。 パターンの任意の部分をクォートして、文字列としてマッチさせることもできます。
式は以下の演算子を使って繋げられます。 以下に演算子を優先度の順に示します:

( expression )
expression の値を返します。これを用いて、 演算子の通常の優先度を変更できます。
! expression
expression が偽ならば真になります。
expression1 && expression2
expression1expression2 が両方とも真であれば真になります。
expression1 || expression2
expression1expression2 のどちらかが真であれば真となります。

expression1 の値だけで条件式全体の返り値が決定できれば、 && 演算子と || 演算子は expression2 を実行しません。

for name [ in word ] ; do list ; done
in に続く単語のリストが展開され、要素のリストが生成されます。 変数 name には、このリストの各要素が順番にセットされ、その度に list が実行されます。「in word 」が省略された場合、 for コマンドは、設定されている位置パラメータそれぞれに対して list を一度ずつ実行します(後述の パラメータ を参照)。 返却ステータスは実行された最後のコマンドの終了ステータスになります。 in に続く要素を展開した結果が空となった場合、 コマンドは全く実行されず、返却ステータス 0 が返されます。
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
最初に、算術式expr1 が、後述の 算術式評価 で説明される規則に従って評価されます。 次に、算術式expr2 がゼロになるまで繰り返し評価されます。 算術式expr2 の評価結果がゼロでなければ、その度毎にlist が実行され、 算術式expr3 が評価されます。 どの算術式も省略された場合は、 評価結果が 1 とみなされた場合のように振る舞います。 返却ステータスは list 中で実行された 最後のコマンドの終了ステータスとなりますが、 算術式のいずれかが無効である場合には不正な値となります。
select name [ in word ] ; do list ; done
in に続く単語のリストが展開され、要素のリストが生成されます。 展開された単語の集合が番号付きで標準エラー出力に出力されます。 「in word 」が省略された場合、 位置パラメータが出力されます (後述の パラメータ を参照)。続いて PS3 が表示され、標準入力から 1 行の読み込みが行われます。 表示された単語のいずれかに対応する数字がこの行に含まれていれば、 name の値としてその単語が設定されます。 行が空であれば、単語とプロンプトが再び表示されます。 EOF を読み込むとコマンドが終了します。 これ以外の値の場合には、 name には空文字列が設定されます。読み込んだ行は変数 REPLY に格納されます。 break または return コマンドが実行されるまで、選択を行うたびに list が実行されます。 select の終了ステータスは、 list 中で最後に実行したコマンドの終了ステータスですが、 コマンドが全く実行されなかった場合には 0 となります。
case word in [ [(] pattern [ | pattern ]
case コマンドは最初に word を展開し、それぞれの pattern に対して順にマッチングを試みます。 マッチングの際にはパス名展開 (後述の パス名展開 を参照) と同じ規則が用いられます。 マッチするものが見つかると、これに対応する list が実行されます。 マッチするものが見つかったら、それ以降のマッチングは行われません。 マッチするパターンが無ければ、終了ステータスは 0 になります。 マッチするものがあったら、終了ステータスは list 中で最後に実行されたコマンドの終了ステータスになります。
if list ; then list;
[ elif list ; then list ; ] ... [ else list ; ] fi 最初に if list が実行されます。この終了ステータスが 0 ならば、then list が実行されます。 そうでなければ elif list がそれぞれ順番に実行され、 この終了ステータスが 0 ならば、対応する then list が実行され、コマンドが終了します。そうでなければ、else list が (もし存在すれば) 実行されます。 終了ステータスは最後に実行されたコマンドの終了ステータスですが、 真と評価された条件が全く無い場合には 0 となります。
while list ; do list ; done
until list ; do list ; done
while コマンドは、list 中の最後のコマンドが終了ステータス 0 を返すまで、繰り返して do list を実行します。until コマンドは while コマンドとほぼ同じですが、 評価の条件が否定となる点が異なります。 do list は、 list 中の最後のコマンドが 0 以外の終了ステータスを返す限りずっと実行されます。 while コマンドと until コマンドの終了ステータスは、 do list で実行された最後のコマンドの終了ステータスになりますが、 コマンドが全く実行されなかった場合には 0 になります。
[ function ] name () { list ; }
name という名前の関数を定義します。関数の本体(body) は、 { と } で囲まれたコマンドの リスト です。単純なコマンドの名前として name が指定されると、 必ずこのリストが実行されます。 関数の終了ステータスは、 関数本体で最後に実行されたコマンドの終了ステータスです (後述の 関数 を参照)。

コメント (COMMENTS)

シェルが対話的でない場合、または対話的なシェルにおいて 組み込みコマンドの shopt に対する interactive_comments オプションが有効となっている (後述の シェルの組み込みコマンド を参照すること) 場合には、 # で始まる単語があると、その単語とその行の残りの文字が全て無視されます。 対話シェルでは、 interactive_comments オプションが有効でなければコメントは使えません。対話シェルでは、 interactive_comments オプションはデフォルトで有効になっています。

クォート

クォート (quoting) を使うと、 特定の文字や単語のシェルに対する特別な意味を取り除けます。 クォートを用いると、特殊文字の特殊な扱いを無効にすることや、 予約語が予約語として識別されることを防いだり、 パラメータの展開を防げます。

前述の 定義 で挙げたメタ文字 (metacharacters) にはそれぞれ特殊な意味があるので、 その文字自身を表すためにはクォートしなければなりません。

コマンド履歴展開機能が使われている場合、履歴の展開を防ぐためには、 履歴展開 (history expansion ) 文字 (普通 ! ) をクォートしなければなりません。

クォートの方法には、 エスケープ文字(escape character) ,シングルクォート、ダブルクォートの 3 種類があります。

クォートされていないバックスラッシュ (\ ) は エスケープ文字 です。エスケープ文字は <newline> という例外を除き、 後に続く文字 1 つの文字としての値を保持させます。 \ <newline> という組合せが現われ、 かつバックスラッシュ自身がクォートされていない場合には、 \ <newline> は行を継続することを表します (つまり、入力ストリームから改行文字が削除され、実質的に無視されます)。

シングルクォートで文字を囲むと、 クォート内部のそれぞれの文字は文字としての値を保持します。 シングルクォートの間にシングルクォートを置くことはできません。 これはバックスラッシュを前に付けても同じです。

ダブルクォートで文字を囲むとクォート内部の全ての文字は文字としての値を 保持しますが、 $ , ` , \ は例外となります。 $` はダブルクォートの内部でも特殊な意味を失いません。 バックスラッシュの場合は、次の文字が $ , ` ," , \ , <newline> のいずれかである場合に限り特殊な意味を失いません。 前にバックスラッシュを付ければ、 ダブルクォート文字をダブルクォートによるクォートの内部で クォートできます。

特殊なパラメータである *@ は、ダブルクォート内部でも特殊な意味を失いません (後述の パラメータ を参照)。

$ 'string ' の形式を持つ単語は特殊な扱いを受けます。 この単語は string に展開され、 それから ANSI C 標準で仕様が決められている、 バックスラッシュでエスケープされている文字に置き換えられます。 バックスラッシュエスケープシーケンスは、 (もし存在すれば) 以下のようにデコードされます:

\a
警告 (ベル)
\b
バックスペース
\e
エスケープ文字
\f
フォームフィード文字
\n
改行文字
\r
復帰文字
\t
水平タブ文字
\v
垂直タブ文字
\\
バックスラッシュ
\'
シングルクォート
\nnn
ASCII コードの 8 進値が nnn である文字 (1 文字につき数字 3 桁)。
\xnnn
ASCII コードの 16 進値が nnn である文字 (1 文字につき数字 3 桁)。

展開された結果はシングルクォートされているのと同じ状態で、 ドル記号は存在しなかったかのように扱われます。

ダブルクォートされた文字列の前にドル記号($ )があると、 文字列は現在のロケールに従って変換されます。 現在のロケールが C または POSIX ならば、 ドル記号は無視されます。文字列が変換されたり置換された場合には、 その結果はダブルクォートされているのと同じ状態になります。

パラメータ

パラメータ (parameter) は値を保持するためのものです。パラメータは 名前 、数字、後述の 特殊なパラメータ で挙げる特殊文字のいずれかで表現されます。シェルでの用法においては、 変数(variable) とは 名前 で表現されたパラメータです。

パラメータに値が代入されていれば、 そのパラメータは設定 (set) されていると言われます。 空文字列も有効な値です。一度値を設定すると、組み込みコマンドの unset を使わなければ設定を取り消す (unset する) ことはできません (後述の シェルの組み込みコマンド を参照)。

変数 には、以下の構文で代入できます:

name =[value ]

value が与えられなかった場合、変数には空文字列が代入されます。全ての value に対して、チルダ展開、パラメータと変数の展開、コマンド置換、 算術式展開、クォート除去が行われます (後述の 展開 を参照)。変数の 整数 属性が設定されている場合 (後述の シェルの組み込みコマンド を参照)、$((...)) の展開を使っていなくても value に対しての算術展開が行われます (後述の 算術式展開 を参照)。 特殊パラメータ で後述する "$@" という例外を除いて、単語の分割は行われません。 パス名展開も実行されません。

位置パラメータ(Positional Parameters)

位置パラメータ (positional parameter) は、1 桁以上の数値で表されるパラメータです。ただし 0 は含みません。 位置パラメータは、シェルが起動されたときにシェルの引き数が代入されますが、 組み込みコマンドの set を使って代入し直すこともできます。 代入文を使って位置パラメータへの代入を行うことはできません。 シェル関数が実行されると、 位置パラメータは一時的に置き換えられます (後述の 関数 を参照)。

2 桁以上の数値を含む位置パラメータを展開するときには、ブレース ({}) で囲まなければなりません (後述の 展開 を参照)。

特殊パラメータ

シェルはいくつかのパラメータを特別扱いします。 このようなパラメータは参照されるだけであり、 値を代入することは許されません。

*
(1 から始まる) 全ての位置パラメータに展開されます。 ダブルクォートの内部で展開が行われたときは、 それぞれのパラメータを特別な変数である IFS の最初の文字で区切って並べた 1 つの単語に展開されます。つまり、 "$* " は "$1 c $2 c ... " と同じです。 ここで c は変数 IFS の値の最初の文字です。 IFS が設定されていなければ、パラメータは空白で区切られます。 IFS が空文字列の場合、パラメータの間には区切り文字は入らず、 全てのパラメータは繋げられます。
@
(1 から始まる) 全ての位置パラメータに展開されます。 ダブルクォートの内部で展開が行われたときは、 それぞれのパラメータは別々の単語に展開されます。 つまり "$@ " は "$1 " "$2 " ... と同じです。 位置パラメータが無い場合には、"$@ " と $@ を展開しても空文字列になります (つまり取り除かれます)。
#
位置パラメータの個数を示す 10 進値に展開されます。
?
最後に実行されたフォアグラウンドのパイプラインの 終了ステータスに展開されます。
-
現在のオプションフラグに展開されます。 これは起動の時に指定したり、組み込みコマンド set で設定したり、( -i オプション等で) シェル自身が設定したりします。
$
シェルのプロセス ID に展開されます。 () を使ったサブシェルの内部では、$ はサブシェルではなく、 現在のシェルのプロセス ID に展開されます。
!
最後に実行されたバックグラウンド (非同期) コマンドの プロセス ID に展開されます。
0
シェルまたはシェルスクリプトの名前に展開されます。 これはシェルの初期化時に設定されます。 コマンドを記述したファイルを指定して bash を起動した場合、 $0 にはそのファイルの名前が設定されます。 -c オプションを付けて bash を起動した場合、実行する文字列の後に引き数があれば、その最初の値が $0 に設定されます。このオプションを指定していない場合には、 bash を起動する時に使用した名前が引き数 0 として与えられ $0 に設定されます。
_
シェルの起動時には、引き数リストで渡された、 実行するシェルまたはシェルスクリプトの絶対ファイル名が設定されます。 その後は、前のコマンドに対する最後の引き数 (展開後のもの) に展開されます。 また、実行する各コマンドの完全なファイル名が設定され、 そのコマンドの環境にエクスポートされます。 メールをチェックするときには、 このパラメータは現在チェックしているメールのファイル名を保持します。

シェル変数

以下の変数はシェルが設定します:

PPID
そのシェルの親のプロセス ID。この変数は読み込み専用です。
PWD
cd コマンドで設定された現在の作業ディレクトリ。
OLDPWD
cd コマンドで設定された、1 つ前の作業ディレクトリ。
REPLY
組み込みコマンド read に引き数が与えられなかった時に読み込まれた行が設定されます。
UID
現在のユーザのユーザ ID に展開されます。 初期化はシェルの起動時に行われます。 この変数は読み込み専用です。
EUID
現在のユーザの実効ユーザ ID に展開されます。 初期化はシェルの起動時に行われます。 この変数は読み込み専用です。
GROUPS
現在のユーザがメンバになっているグループのリストを含んだ配列変数です。 GROUPS への代入は効果がなく、エラーステータスを返します。 GROUPS が unset された場合はこの変数の特殊な性質はなくなります。 その後に再設定されたとしても元に戻りません。
BASH
現在実行している bash を起動したときに使われた、完全なファイル名に展開されます。
BASH_VERSION
現在実行している bash のバージョンを示す文字列に展開されます。
BASH_VERSINFO
読み込み専用の配列変数で、配列の各要素は現在実行されている bash のバージョン情報を持っています。 配列変数の要素に代入される内容を以下に示します:

BASH_VERSINFO[ 0]
メジャーバージョン番号 (リリース )。
BASH_VERSINFO[ 1]
マイナーバージョン番号 (バージョン )。
BASH_VERSINFO[ 2]
パッチレベル。
BASH_VERSINFO[ 3]
ビルドバージョン。
BASH_VERSINFO[ 4]
リリースステータス (beta1 など)。
BASH_VERSINFO[ 5]
MACHTYPE の値。
SHLVL
bash の実体が起動されるたびに 1 ずつ増えます。
RANDOM
このパラメータが参照される度に、 0 から 32767 までのランダムな整数が生成されます。 RANDOM に値を代入すると、乱数の列を初期化できます。 RANDOM unset すると、この変数の特殊な性質は無くなります。後で再び set しても元には戻りません。
SECONDS
このパラメータを参照すると、シェルが起動されてからの秒数が返されます。 SECONDS に値を代入した場合、それ以降の参照において返される値は、 代入された値と代入以降の秒数を足した値になります。 SECONDS unset すると、この変数の特殊な性質は無くなります。後で再び set しても元には戻りません。
LINENO
この変数が参照されると、 シェルはスクリプトや関数における現在の行番号 (1から始まります) を表す 10 進値を代入します。スクリプトや関数の内部でない場合には、 意味のある値が代入されることは保証されません。 LINENO unset すると、この変数の特殊な性質は無くなります。後で再び set しても元には戻りません。
HISTCMD
現在のコマンドの履歴番号 (履歴リストにおけるインデックス) です。 HISTCMD unset すると、この変数の特殊な性質は無くなります。後で再び set しても元には戻りません。
FUNCNAME
現在実行中のシェル関数の名前です。 この変数はシェル関数を実行している間のみ存在します。 FUNCNAME への代入は効果がなく、エラーステータスを返します。 FUNCNAME unset すると、この変数の特殊な性質は無くなります。後で再び set しても元には戻りません。
DIRSTACK
現在のディレクトリスタックの内容を持つ配列変数 (後述の 配列 を参照) です。組み込みコマンド dirs を使うと、スタック中のディレクトリがスタック順に表示されます。 配列変数の要素に代入を行うと、 既にスタックに入っているディレクトリを変更できますが、 ディレクトリの追加と削除を行うためには、組み込みコマンドの pushdpopd を使わなければなりません。 この変数に代入を行っても現在の作業ディレクトリは変わりません。 DIRSTACK unset すると、この変数の特殊な性質は無くなります。後で再び set しても元には戻りません。
PIPESTATUS
フォアグラウンドのパイプラインで最後に実行されたプロセスの 終了ステータスのリストを含む配列変数です (後述の 配列 を参照)。
OPTARG
組み込みコマンド getopts で処理した最後のオプション引き数の値です (後述の シェルの組み込みコマンド を参照)。
OPTIND
組み込みコマンド getopts で次に処理されるオプション引き数のインデックスです (後述の シェルの組み込みコマンド を参照)。
HOSTNAME
現在のホスト名が自動的に設定されます。
HOSTTYPE
bash を実行するマシンの種類をユニークに記述する文字列が自動的に設定されます。 デフォルト値はシステム依存です。
OSTYPE
bash を実行するオペレーティングシステムを記述する文字列が自動的に設定されます。 デフォルト値はシステム依存です。
MACHTYPE
bash を実行するシステムの種類を完全に指定する文字列が、 GNU 標準の cpu-company-system の形式で設定されます。 デフォルト値はシステム依存です。
SHELLOPTS
コロン区切りのリストで、有効になっているシェルのオプションを示します。 リスト中のそれぞれの単語は、組み込みコマンド set-o オプション (後述の シェルの組み込みコマンド を参照) に対する有効な引き数になっています。 SHELLOPTS に入っているオプションは、set -o を実行した場合にも on であると報告されます。 この変数が bash の起動時に環境変数に入っていた場合、 どの起動ファイルを読むよりも前にリスト中のシェルオプションが有効になります。 この変数は読み込み専用です。
COMP_WORDS
現在のコマンドラインの各単語からなる配列変数 (後述の 配列 参照) です。 この変数はプログラム補完機能 (後述の プログラム補完 を参照) から呼ばれたシェル関数においてのみ有効です。
COMP_CWORD
現在カーソル位置が置かれている単語の ${COMP_WORDS} におけるインデックスです。 この変数はプログラム補完機能 (後述の プログラム補完 を参照) から呼ばれたシェル関数においてのみ有効です。
COMP_LINE
現在のコマンドラインです。 この変数はプログラム補完機能 (後述の プログラム補完 を参照) から呼ばれたシェル関数においてのみ有効です。
COMP_POINT
現在のコマンドの先頭からの相対値として与えられた カーソル位置のインデックスです。 現在のカーソル位置が現在の現在のコマンドの最後にある場合、 この変数の値は ${#COMP_LINE} と等しくなります。 この変数はプログラム補完機能 (後述の プログラム補完 を参照) から呼ばれたシェル関数においてのみ有効です。

以下の変数はシェルが使用します。場合によっては、 bash がデフォルト値を変数に代入します。このような場合については後述します。

IFS
内部フィールド区切り文字 (Internal Field Separator) です。展開を行った後に単語を分割する場合や、組み込みコマンドの read を使った時に行を単語に分割する場合に使われます。 デフォルト値は ``<空白><タブ><改行>'' です。
PATH
コマンドの検索パスです。 シェルがコマンドを検索するディレクトリをコロンで区切って並べたリストです (後述の コマンドの実行 を参照)。デフォルトのパスはシステム依存で、 bash をインストールしたシステム管理者が設定します。 一般的な値は /usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.です。
HOME
現在のユーザのホームディレクトリです。 組み込みコマンド cd のデフォルトの引き数になります。 この変数の値は、チルダ展開を実行するときにも使われます。
CDPATH
cd コマンドの検索パスです。これは、 cd コマンドで指定した対象ディレクトリを探すディレクトリを コロンで区切って並べたリストです。 例えば、``.:~:/usr'' といった値になります。
BASH_ENV
bash がシェルスクリプトを実行する時にこの値が設定されている場合、 この値は ( ~/.bashrc のように) シェルを初期化するコマンドが書かれているファイル名と解釈されます。 BASH_ENV の値をファイル名として処理する前には、パラメータ展開、コマンド置換、 算術的展開が行われます。 この結果のファイルを検索する際には PATH は使用されません。
MAIL
このパラメータにファイル名が設定されており、かつ変数 MAILPATH が設定されていなければ、 bash は指定されたファイルへのメールの到着をユーザに通知します。
MAILCHECK
bash がメールをチェックする頻度を (秒数で) 指定します。 デフォルト値は 60 秒です。 メールをチェックする時間になると、 シェルはプライマリのプロンプトを表示する前にチェックを行います。 この変数が unset された場合、 あるいはこの変数に 0 より大きい数値以外が代入された場合は、 シェルはメールのチェックを行いません。
MAILPATH
メールのチェックに使うファイル名をコロンで区切って並べたリストです。 特定のファイルにメールが到着したときに出力される メッセージは、`?' を使ってファイル名をメッセージから区切ることによって 指定できます。メッセージのテキスト中で使われたときは、 $_ は現在のメールファイルの名前に展開されます。 設定例:

MAILPATH ='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'

この変数のデフォルト値は bash が与えますが、 bash が使うユーザのメールファイルの位置はシステム依存です (/var/mail/$USER 等)。

PS1
このパラメータの値は展開されてプライマリのプロンプト文字列として使われます。 (後述の プロンプト を参照)、 デフォルト値は ``\s-\v\$ '' です。
PS2
このパラメータの値は PS1 と同じように展開され、セカンダリのプロンプト文字列として使われます。 デフォルト値は ``> '' です。
PS3
このパラメータの値は select コマンド (前述の シェルの文法 を参照) のプロンプトとして使われます。
PS4
このパラメータは PS1 と同じように展開されます。この値は実行トレース中に bash が表示する各コマンド前に出力されます。 複数段の間接レベル (levels of indirection) を示すときは、 PS4 の最初の文字が必要に応じて複数回表示されます。 デフォルト値は ``+ '' です。
TIMEFORMAT
このパラメータの値は、予約語である time が先頭に付いているパイプラインに対して、 時間情報の表示の仕方を指定するフォーマット文字列として使われます。 % は、時間の値などに展開される エスケープシーケンスを示すための文字です。 エスケープシーケンスとその意味を以下に示します。 ただし、ブレース ([]) は省略可能であることを表しま す。

%%
% 文字そのもの。
%[p ][l]R
経過した秒数。
%[p ][l]U
ユーザモードで使われた CPU の秒数。
%[p ][l]S
システムモードで使われた CPU の秒数。
%P
CPU のパーセンテージ。(%U + %S) / %R で算出されます。

p 省略可能で、精度 (precision) が何桁であるかを指定します。 つまり小数点以下の桁数を指定します。この値が 0 ならば、 小数点や小数の部分は出力されません。 また、小数点以下で指定できるのは 3 桁までです。 つまり、p の値が 3 より大きければ 3 に変更されます。 p を指定しなければ、この値は 3 となります。
l は省略可能ですが、指定すると、分を含み、 MM mSS .FF という形式の長いフォーマットになります。 小数を含むかどうかは p の値によって決まります。
この変数が設定されていなければ、 bash$'\nreal\t%3lR\nuser\t%3lU\nsys%3lS' という値が指定されているかのように動作します。 この値が空文字列ならば、時間の情報は表示されません。 フォーマット文字列の表示の際には、末尾に改行文字が追加されます。
HISTSIZE
コマンド履歴に記憶するコマンドの数 (後述の HISTORY を参照)。
HISTFILE
コマンド履歴が保存されるファイルの名前 (後述の 履歴 を参照)。デフォルト値は ~/.bash_history です。 設定されていない場合、 対話シェルが終了する時に履歴の保存が行われません。
HISTFILESIZE
履歴ファイルに保持する履歴の最大数です。この変数に値が代入された場合、 その行数を越えないように、必要に応じて履歴ファイルが切り詰められます。 デフォルト値は 500 です。対話シェルが終了する時にも、 履歴ファイルのサイズはファイル書き込みの後にこのサイズに切り詰められます。
OPTERR
値として 1 が設定されている場合、 bash は組み込みコマンド getopts (後述の シェルの組み込みコマンド を参照) を使って生成したエラーメッセージを表示します。 シェルが起動されたり、シェルスクリプトが実行される度に、 OPTERR は 1 に初期化されます。
LANG
LC_ で始まる変数で特に選択されない任意のカテゴリに対して、 ロケールのカテゴリを決めるために使います。
LC_ALL
この変数はロケールのカテゴリを指定する LC_ 変数と LANG の 値を全て上書きします。
LC_COLLATE
この変数はパス名展開の結果をソートするときに使用される照合順序と、 パス名展開とパターンマッチングにおける 範囲展開、同値クラス、照合シーケンスの動作決定します。
LC_CTYPE
この変数は、パス名展開とパターンマッチングにおける 文字の解釈と文字クラスの挙動を決めます。
LC_MESSAGES
この変数は、$ の後に続くダブルクォートされた文字列の 翻訳に使うロケールを決めます。
LC_NUMERIC
この変数は数字のフォーマットに使用するロケールカテゴリを決定します。
LINES
組み込みコマンド select によって、選択されたリストを表示する際の行数の決定に用いられます。 SIGWINCH を受信すると自動的に設定されます。
COLUMNS
組み込みコマンド select によって、選択されたリストを表示する際の端末幅の決定に用いられます。 SIGWINCH を受信すると自動的に設定されます。 PROMPT_COMMAND 設定されていると、プライマリプロンプトを出す前に毎回、 この値がコマンドとして実行されます。
IGNOREEOF
単独で入力された EOF 文字を受け取ったときの対話シェルの動作を制御します。 この変数が設定されていれば、指定されている値の数だけの EOF 文字を連続して行頭の文字として入力しなければ bash は終了しません。この変数に数値以外の値が設定されている場合や、 値が設定されていない場合には、デフォルト値として 10 が使われます。 この変数が存在しなければ、 EOF 文字はシェルへの入力の終わりを示します。
TMOUT
0 より大きい値が設定されていると、 この値はプライマリプロンプトを出した後に入力を待つ秒数として解釈されます。 この秒数だけ待った時点で入力が無ければ bash は終了します。
FCEDIT
組み込みコマンド fc が使うデフォルトのエディタです。
FIGNORE
ファイル名補完 (後述の READLINE を参照) を行う際に無視するサフィックスを コロンで区切って並べたリストです。 FIGNORE のエントリのいずれかにサフィックスがマッチするファイル名は、 ファイル名補完にマッチするファイルのリストから除外されます。 例えば値として ``.o:~'' を設定します。
GLOBIGNORE
パス名展開で無視するファイル名の集合を定義するパターンを コロンで区切って並べたリストです。 パス名展開パターンにマッチするファイル名が GLOBIGNORE 内のパターンのどれかにもマッチする場合、 これはマッチしたもののリストから削除されます。
INPUTRC
readline の起動ファイルのファイル名です。これはデフォルト値の (後述の READLINE を参照) を上書きします。
HISTCONTROL
ignorespace の値が設定されていると、 空白 文字で始まる行は履歴リストに入りません。 ignoredups の値が設定されていると、 履歴の最後の行にマッチする行は履歴リストに入りません。 ignoreboth の値はこれらの 2 つのオプションを同時に実現します。 設定されていないか上記のいずれの値でもない場合には、 パーザが読み込んだ全ての行は HISTIGNORE の値が示す条件の下で履歴リストに保存されます。 この変数は既に古くなっており、この機能は HISTIGNORE 変数で用いることになっています。 複数行にまたがる複雑なコマンドの場合は 2 番目以降の行が調べられることはありません。よって、これらは HISTCONTROL の値に関わらず履歴に追加されます。
HISTIGNORE
どのコマンド行を履歴リストに保存するかを決めるために使うパターンを コロンで区切って並べたリストです。 それぞれのパターンは行の先頭と比較され、 行全体が完全に一致しなければなりません (`* ' が暗黙的に追加されるこ とはありません)。各パターンの評価は HISTCONTROL で指定したチェックが行われた後の行に対して実行されます。 通常のシェルのパターンマッチング文字以外に、 `& ' が履歴の前の行にマッチします。 バックスラッシュを使って `& ' をエスケープできます。 マッチングを試みる前にバックスラッシュは取り除かれます。 複数行にまたがる複雑なコマンドの場合、2 番目以降の行は調べられません。 よって、これらは HISTIGNORE の値に関わらず履歴に追加されます。
histchars
2 文字または 3 文字で、 履歴の展開とトークン分割 (後述の 履歴展開 を参照) を制御します。 最初の文字は 履歴展開 (history expansion) 文字であり、 履歴展開の先頭を示す文字です。通常、これは `! ' です。 2 番目の文字は 簡易置換 (quick substitution) 文字であり、前に入力したコマンドの文字列を 別の文字列に置き換えて再実行を行うための省略表現として使います。 デフォルト値は `^ ' です。 3 番目の文字は省略可能です。単語の先頭でこの文字が見つかると、 行の残りの部分がコメントとなるような文字を指定します。 これは通常は `# ' です。 履歴コメント文字があると、 その行の残りの単語に対する履歴置換はスキップされます。 この文字があるからといって、 必ずしもシェルのパーザが行の残りの部分をコメントとして扱うわけではありません。
HOSTFILE
と同じフォーマットであり、 シェルがホスト名を補完する必要があるときに読み込むファイルの名前を示します。 シェルの実行中でも補完するホスト名のリストを変更できます。 この変数が変更された次の機会にホスト名の補完を試みるとき、 bash は新しいファイルの内容を既存のデータベースに追加します。 HOSTFILE が設定されているがその値が空文字列の場合、 bash は補完可能なホスト名のリストを取得するために を使用します。 HOSTFILE が unset された場合は、ホスト名のリストはクリアされます。
auto_resume
この変数はシェルがユーザとジョブ制御の相互作用をどのように扱うかを決めます。 この変数を設定した場合、1 語からなるリダイレクト無しの単純なコマンドが、 停止中ジョブの実行再開候補として扱われます。 曖昧な指定は許されません。 入力された文字列で始まるジョブが複数ある場合には、 最後にアクセスされたものが選ばれます。 ここでの 名前 とは、コマンドを起動する際に使ったコマンドラインのことです。 この値に exact が設定されている場合、 与えられた文字列は停止しているジョブの名前に 正確にマッチしなければなりません。 substring が設定されている場合は、 与えられた文字列は停止しているジョブの名前の部分文字列に マッチする必要があります。 substring という値は、ジョブ識別子の %? に似た機能を持っています (後述の ジョブ制御 を参照)。これ以外の値が設定されている場合、 与えられた文字列は停止しているジョブの名前の プレフィックスでなければなりません。これはジョブ識別子の % と似た機能を持っています。
COMPREPLY
bash が可能な補完候補を読み込む配列変数です。 この値はプログラム補完機能 (後述の プログラム補完 を参照) によって呼び出されたシェル関数によって生成されます。

配列

bash は 1 次元の配列変数を扱うことができます。 全ての変数は配列として使用できます。 declare 組み込みコマンドを使えば、明示的に配列を宣言できます。 配列のサイズの上限はありませんし、 メンバのインデックス付けや代入を 連続的にしなければならないという条件もありません。 配列のインデックス付けは 0 から始まる整数を用いて行います。

変数の代入の際に name [subscript ]=value という記法が使われた場合、配列は自動的に生成されます。 subscript は算術式として扱われますが、この式は評価すると 0 以上の数値になるものでなければなりません。 明示的に配列を宣言するには、 declare -a name を使います (後述の シェルの組み込みコマンド を参照)。 declare -a name [subscript ]も許されます。subscript は無視されます。 組み込みコマンドの declarereadonly を使うと、配列変数に対して属性を設定できます。 どちらの属性も配列のメンバ全てに対して適用されます。

配列の代入は name =( value1 ... valuen ) という形式の複合代入 (compound assignment) を用いて行います。 ここでそれぞれの value の形式は [subscript ]=string です。 必要なのは string だけです。 ブラケット([])と添字を省略しなかった場合、 そのインデックスに対して代入が行われます。 省略した場合には、代入される要素のインデックスは、 その文の中で直前に代入されたインデックスに 1 を加えたものになります。 インデックスは 0 から始まります。 この記法は組み込みコマンド declare でも使えます。個別の配列要素に対する代入は、先に説明した name [subscript ]=value の記法を使って行います。

配列の任意の要素は、${name [subscript ]} を使って参照できます。 パス名展開との衝突を避けるためにブレースが必要です。 添字(subscript)@* ならば、その単語は name の全ての要素に展開されます。これらの添字が異なるのは、 単語がダブルクォートの内部にある場合だけです。 単語がダブルクォートされていれば、${name } は 1 つの単語に展開されます。 この単語は、配列の各メンバの値を特殊変数 IFS の値で区切って並べたものです。${name [@]}は、 name の各要素を別々の単語に展開します。 配列のメンバが全く無いときは、${name [@]} は空の単語に展開されます。 これは特殊パラメータ *@ に似ています (前述の 特殊パラメータ を参照)。${#name [subscript ]} は ${name [subscript ]} の長さに展開されます。 subscript* または @ の場合は、 配列中の要素数に展開されます。添字無しで配列変数を参照すると、 要素 0 を参照したことになります。

組み込みコマンドの unset は配列の破棄に使われます。unset name [subscript ] とすると、インデックスが subscript である配列の要素が破棄されます。 unset name (name は配列) または unset name [subscript ] (subscript* または @ ) とすると、 配列全体が破棄されます。

組み込みコマンドの declare , local , readonly いずれにおいても、 -a オプションで配列を指定できます。組み込みコマンド read では、 -a オプションを使えば標準入力から読み込んだ単語のリストを 配列に代入できます。組み込みコマンド setdeclare では、別の変数への代入に再利用できるような形で配列の値を表示します。

展開

展開はコマンドラインが単語へ分割された後に (コマンドライン上で) 行われます。行われる展開は 7 種類あります: ブレースの展開 (brace expansion) , チルダの展開 (tilde expansion) , パラメータと変数の展開 (parameter and variable expansion) , コマンド置換 (command substitution) , 算術式展開 (arithmetic expansion) , 単語の分割 (word splitting) , パス名の展開 (pathname expansion)

展開の順序は次のようになります: ブレース展開、チルダ展開、パラメータ・ 変数・算術式展開、コマンド置換 (左から右へ)、単語分割、パス名展開。

これらに加えて プロセス置換 (process substitution) をサポートできるシステムもあります。

展開した部分の単語の数が変化することがあるのは、ブレース展開、 単語の分割、パス名展開だけです。他の展開では、 1 つの単語は 1 つの単語に展開されます。 この規則の唯一の例外は先に説明した "$@ " と "${ name [@]} " の展開 ( パラメータ を参照) だけです。

ブレース展開

"ブレース展開 (brace expansion)" を使うと、任意の文字列を生成できます。この機構は パス名展開 に似ていますが、 生成されたファイル名が実在する必要はありません。 ブレース展開されるパターンは、 前置部分 (preamble: 省略可能) 、対になるブレースの間にコンマで区切って並べた文字列、 後置部分 (postscript: 省略可能) を順に並べたものです。 前置部分はブレース内にある文字列それぞれの先頭部分に追加され、 後置部分は左から右に順に展開されて得られた それぞれの文字列の末尾に追加されます。

ブレースの展開は入れ子にできます。 展開して得られた文字列はソートされず、 左から右への順番がそのまま残ります。 例えば a{ d,c,b} e は `ade ace abe' と展開されます。

ブレースの展開は他のどの展開よりも前に実行されます。 また、他の展開において特殊な意味を持つ文字もそのまま結果に残ります。 つまり、厳密にテキスト操作だけを行います。 bash は、展開の文脈やブレースの間のテキストに対して 文法的な解釈を適用することは一切ありません。

正しい形のブレース展開には、クォートされていない開きブレースと 閉じブレース、また少なくとも 1 つのクォートされていないコンマが 含まれていなければなりません。正しい形でないブレース展開は全て、 変更されないでそのまま残ります。 {, をバックスラッシュでクォートすれば、 ブレース展開の一部と解釈されないようにできます。 パラメータ展開との衝突を避けるため、文字列 ${ はブレース展開の対象とは解釈されません。

この仕組みは、 生成される文字列の共通先頭部分が上記の例より長い場合に、 短縮表現としてよく使用されます:

mkdir /usr/local/src/bash/{old,new,dist,bugs}
あるいは
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

ブレース展開の導入によって、伝統的な sh とは少し非互換になった部分があります。 sh は単語の一部として開きブレースや閉じブレースが現われても特別扱いはせず、 そのまま出力に残します。 bash はブレース展開の結果として単語からブレースを取り除きます。例えば shfile{1,2} のように入力された単語はそのままの形で出力されますが、 bash ではこの同じ単語は展開されて file1 file2 のように出力されます。 厳密に sh と互換にしたければ、 bash+B オプションを付けて起動するか、 set コマンドに +B オプションを与えてブレース展開を無効にしてください (後述する シェル組み込みコマンド を参照)。

チルダ展開

クォートされていないチルダ (`~ ') で単語が始まった場合、 クォートされていないスラッシュよりも前にある文字すべて (クォートされていないスラッシュが無ければすべての文字) はチルダプレフィックス (tilde-prefix ) と解釈されます。 クォートされている文字がチルダプレフィックス中に無ければ、 チルダプレフィックス中のチルダ以降の文字は、 ログイン名 (login name) になる可能性がある文字列として扱われます。 このログイン名が空文字列ならば、チルダはシェルパラメータ HOME の値に置き換えられます。 HOME が設定されていない場合は、代わりにシェルを実行しているユーザの ホームディレクトリに置き換えられます。 ログイン名が空でなければ、 チルダプレフィックスは指定されたログイン名に対応する ホームディレクトリに置き換えられます。

チルダプレフィックスが `~+' ならば、チルダプレフィックスはシェル変数 PWD の値に置き換えられます。 チルダプレフィックスが `~-' ならば、シェル変数 OLDPWD の値に置き換えられます (値が設定されていれば)。 チルダプレフィックス中のチルダより後の文字が数値 N であれば (数値の前に `+' や `-' を置くこともできます)、 チルダプレフィックスはディレクトリスタック内の対応する要素に置換されます。 置換される要素は、チルダプレフィックスを引き数として組み込みコマンド dirs を実行したときに表示されるものです。 チルダプレフィックスにおけるチルダ以降の文字が、 先行する `+' や `-' のない数値である場合は、`+' であるとみなされます。

ログイン名が有効でない場合や、チルダ展開が失敗した場合には、 単語は置き換えられません。

全ての変数代入において、 := の直後にクォートされていないチルダプレフィックスがないかチェックが行われます。 もし見つかった場合にはこれらもチルダ展開されます。 したがって、 PATH , MAILPATH , CDPATH への代入にチルダを含むファイル名を使えば、 シェルは展開された値を代入します。

パラメータの展開

`$ ' 文字があると、パラメータ展開、コマンド置換、 算術式展開が行われます。展開されるパラメータ名やシンボルは、 ブレースで括ることもできます。 ブレースは省略可能ですが、 変数の直後に変数名の一部と解釈できる文字が置かれた場合に、 その文字と共に変数が展開されてしまうのを防ぐために用意されています。

ブレースを使った場合、マッチングを終えるブレースは最初の `} ' です。 ただしバックスラッシュでエスケープされているものや クォートされている文字列中のものは含まれませんし、 算術式展開やコマンド置換、パラメータ展開に入っているものも含まれません。

${parameter }
parameter の値が置換されます。ブレースが必要になるのは、 parameter が 2 桁以上の数字を持つ位置パラメータの場合や、 parameter の直後の文字を名前の一部として解釈させたくない場合です。

parameter の最初の文字が感嘆符である場合、間接変数レベル (level of variable indirection) という概念が導入されます。 bash は、展開に parameter そのものの値を使用するのでなく、 parameter の感嘆符を除いた残りの文字を変数名として扱い、 その変数の値をその後の展開に使用します。 これが間接展開 (indirect expansion) と呼ばれるものです。 ただし ${!prefix *} の展開は例外です。これは以下で説明します。

以下に示すそれぞれの場合、word に対してチルダ展開、 パラメータ展開、コマンド置換、算術式展開が行われます。 部分文字列展開以外の場合、 bash はパラメータが設定されているか、空ではないかを調べます。 コロンを省略した場合には設定されているかどうかのみを調べます。

${parameter :- word }
デフォルトの値を使いますparameter が設定されていないか空文字列であれば、 word を展開したものに置換されます。そうでなければ、 parameter の値に置換されます。
${parameter := word }
デフォルトの値を代入しますparameter が設定されていないか空文字列であれば、 word を展開したものが parameter に代入されます。それから parameter の値への置換が行われます。 位置パラメータや特殊パラメータへの代入をこのように行うことはできません。
${parameter :? word }
空文字列または設定されていない場合にエラーを表示しますparameter が空文字列または設定されていない場合、word を展開したもの ( word がなければ パラメータが空文字列または設定されていないことを示すメッセージ) が標準エラー出力に出力されます。シェルが対話的でなければ、 シェルは終了します。パラメータに空文字列以外が設定されていれば、 parameter の値への置換が行われます。
${parameter :+ word }
別の値を使用しますparameter が空文字列または設定されていなければ、空文字列に置換されます。 そうでなければ word を展開したものに置換されます。
${parameter : offset }
${parameter : offset : length }
部分文字列展開parameter を展開したものから最大 length 文字を取り出します。 先頭の文字は offset で指定します。length を省略すると、 offset で指定した文字を先頭にして、 parameter の残り全部が含まれる部分文字列に展開します。 lengthoffset は算術式です (後述の 算術式評価 を参照)。 length の評価結果は 0 以上の数でなければなりません。 offset を評価すると 0 未満の数になる場合、この値は parameter の値の末尾からのオフセットとして使われます。 parameter@ ならば、結果は offset から始まる length 個の位置パラメータになります。 parameter が @ または * のインデックスが付いている配列名ならば、 結果は配列の ${parameter [offset ]} を先頭とする要素 length 個となります。位置パラメータを使う場合以外は、 部分文字列のインデックスは 0 から始まります。位置パラメータの場合には、 インデックスは 1 から始まります。
${! prefix * }
prefix で始まるすべての変数の名前に展開して、 IFS 特殊変数の最初の文字によって区切ります。
${# parameter }
parameter の値に含まれる文字数に置換されます。 parameter* または @ ならば、位置パラメータの数に置換されます。 parameter* または @ が添字になっている配列名ならば、配列中の要素数に置換されます。
${parameter # word }
${parameter ## word }
word が展開され、パス名展開の場合と同じようなパターンを作ります。 このパターンが parameter の値の先頭部分とマッチする場合、展開して得られる値は parameter を展開した値から最短一致パターン (``# ''の場合) または最長一致パターン (``## '' の場合) を取り除いたものになります。 parameter@ または * である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。 parameter@ または * が添字になっている配列変数である場合、 パターンを削除する操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。
${parameter % word }
${parameter %% word }
word が展開され、パス名展開の場合と同じようなパターンを作ります。 このパターンが parameter を展開した値の末尾の部分とマッチする場合、展開結果は parameter を展開した値から最短一致パターン (``% '' の場合) または最長一致パターン (``%% '' の場合) を取り除いたものになります。 parameter@ または * である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。 parameter@ または * が添字になっている配列変数である場合、 パターンを削除する操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。
${parameter / pattern / string }
${parameter // pattern / string }
pattern が展開され、 パス名展開の場合と同じようなパターンを作ります。 parameter の展開が行われ、 その値のうち pattern に最長一致する部分が string に置換されます。 前者の形式の場合には、最初にマッチした部分だけが置換されます。 後者の形式の場合には、マッチした部分は全て string に置換されます。 pattern# で始まる場合には、パターンは parameter を展開した値の先頭にマッチしなければなりません。 pattern% で始まる場合には、パターンは parameter を展開した値の末尾にマッチしなければなりません。 string が空の場合には pattern にマッチした部分は削除されます。 またこの場合には、pattern の後に続く / は省略可能です。 parameter@ または * である場合、置換操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。 parameter@ または * が添字になっている配列変数である場合、 置換操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。

コマンド置換

コマンド置換 (command substitution) を用いると、 コマンド名をコマンドの出力で置き換えできます。 コマンド置換には以下の 2 つの形式があります:


$( command )
または
` command `

bash による展開は、command の実行およびコマンド置換の部分を コマンドの標準出力と置換することにより実行されます。 この際、末尾の改行文字は削除されます。 文字列の途中にある改行文字は削除されませんが、 単語分割の際に削除されることがあります。 コマンド置換 $(cat file ) は、同じ意味を持ち、 しかも高速な $(< file ) に置き換え可能です。

バッククォートを使う古い形式の置換を用いたとき、 バックスラッシュは文字通りの意味を保ちますが、 $ , ` , \ の前にある場合は例外となります。 バックスラッシュが前置されていないバッククォートがあると、 そこでコマンド置換は閉じられます。 $(command ) という形式を用いたときは、 括弧の間にある全ての文字がコマンドとなります。 特別扱いされる文字はありません。

コマンド置換は入れ子にできます。 バッククォート形式の時に入れ子を行うには、 内側のバッククォートをバックスラッシュでエスケープします。

置換がダブルクォート内部にある場合には、 置換の結果に対する単語分割とパス名展開は行われません。

算術式展開

算術式展開を使うと、算術式を評価して、その結果に置換できます。 算術式展開のフォーマットを次に示します:

$(( expression ))

expression はダブルクォート内部にある場合と同様に扱われますが、 括弧の内側のダブルクォートが特別扱いされることはありません。 式に含まれる全てのトークンに対して、 パラメータ展開・文字列展開・コマンド置換・クォートの削除が行われます。 算術式置換は入れ子にできます。

評価は後述の "算術式評価" で示す規則に基づいて行われます。 expression が不正であれば、 bash は評価の失敗を示すメッセージを出力し、置換を全く行いません。

プロセス置換

プロセス置換 (process substitution) がサポートされるのは、 名前付きパイプ (FIFO ) または名前付きオープンファイルの /dev/fd メソッドをサポートしているシステムです。これは <( list ) または >( list ) の形になります。 プロセス list は、その入力や出力が FIFO または /dev/fd 中の 何らかのファイルに接続された状態で実行されます。 このファイルの名前は、展開の結果として、 引き数のかたちで現在のコマンドに渡されます。 >( list ) の形式を使った場合、 ファイルへの書き込みは list への入力となります。 <( list ) の形式を使った場合、 引き数として渡されたファイルは list の出力を得るために読み込まれます。

利用可能であれば、プロセス置換 (process substitution) は、 パラメータ展開・変数展開・コマンド置換・算術式展開と同時に行われます。

単語の分割

シェルはパラメータ展開・コマンド置換・算術式展開 (ダブルクォートの内部ではこれらの展開は行われません) の結果をスキャンし、 "単語分割" を行います。 シェルは IFS のそれぞれの文字を区切り文字として扱い、 他の展開の結果をこれらの文字によって単語に分割します。 IFS が設定されていないか、その値が正確にデフォルト値の <スペース><タブ><改行> ならば、 IFS 文字の任意の列で単語が区切られます。 IFS がデフォルト以外の値を持っていれば、空白文字 ( スペース および タブ )の列は単語の先頭と末尾では無視されます。これは空白文字が IFS の値 ( IFS 空白文字) に含まれる限り成り立ちます。 IFS に含まれ、 IFS 空白文字ではない文字は全て、隣接する任意の IFS 空白文字と一緒になってフィールドの区切りとなります。 IFS 空白文字の列も区切り文字として扱われます。 IFS の値が空文字列であれば、単語分割は全く行われません。

明示的に指定した空の引き数(3"" または 3'')は削除されずに残ります。 クォートされていない暗黙的な空の引き数が、 値を持たないパラメータを展開した結果として得られますが、 これらは削除されます。 値を持たないパラメータがダブルクォート内部で展開されると、 これは空である引き数となり、消されずに残ります。

展開が行われなければ単語分割も行われない点に注意してください。

パス名展開

-f オプションが指定されていなければ、単語分割を行った後に bash はそれぞれの単語が * , ? , [ を含んでいるかどうか調べます。 これらの文字のいずれかが見つかると、その単語は パターン と見なされ、 パターンにマッチするファイル名を アルファベット順にソートしたリストに置換されます。 マッチするファイル名が見つからず、かつシェルのオプション nullglob が無効ならば、その単語は変更されずにそのまま残ります。 nullglob オプションが設定されていて、かつマッチするファイル名が見つからなければ、 その単語は削除されます。 シェルのオプション nocaseglob が有効ならば、マッチングにおいてアルファベットの大文字と小文字は区別さ れません。 パターンをパス名展開に使うとき、名前の先頭やスラッシュの直後の ``.'' は明示的にマッチさせなければなりません。ただしシェルのオプション dotglob が設定されている場合は例外です。 パス名のマッチングを行うとき、 スラッシュ文字は必ず明示的にマッチさせなければなりません。 これ以外の場合には、 ``.'' が特別扱いされることはありません。 シェルのオプション nocaseglob , nullglob , dotglob の詳しい説明については、後述の シェルの組み込みコマンド に書かれている shopt の説明を参照してください。

シェル変数 GLOBIGNORE を使って、 パターン にマッチするファイル名の集合を制限できます。 GLOBIGNORE が設定されていれば、マッチするファイル名のうち GLOBIGNORE 中のパターンにもマッチしたものは、 マッチしたもののリストから取り除かれます。 ファイル名 ``.''``..'' は必ず無視されます。これは GLOBIGNORE が設定されていても同じです。しかし、 GLOBIGNORE を設定するとシェルオプションの dotglob が有効になるので、 ``.'' で始まる他のファイル名は全てマッチします。 ``.'' で始めるファイル名を無視する古い動作をさせるには、 ``.*'' GLOBIGNORE のパターンに含めてください。 GLOBIGNORE が設定されていなければ、 dotglob オプションは無効になります。

パターンマッチング

パターンに含まれる文字のうち、後述する特殊パターン文字以外の文字は、 自分自身にマッチします。NUL 文字がパターン中に現われてはいけません。 特殊パターン文字をその文字そのものにマッチさせるためには、 クォートしなければなりません。

特殊パターン文字は以下の意味を持っています:

*
空文字列を含む、任意の文字列にマッチします。
?
任意の 1 文字にマッチします。
[...]
括られた文字のうち任意の 1 文字にマッチします。 2 つの文字の間にハイフンを入れたものは、 範囲表現 (range expresion) を表します。ソート順で 2 つの文字の間にある任意の文字と、 両端の 2 文字がマッチします。 ソートには現在のロケールの照合順序 (collating sequance) と文字セットが用いられます。 [ の次の文字が ! または ^ ならば、括られた文字に含まれない任意の文字がマッチします。 範囲表現における文字のソート順は、 現在のロケール (およびシェル変数 LC_COLLATE が指定されていればその値) によって決定されます。 - は、文字集合の最初または最後の文字として含めると マッチングの対象にできます。 ] は、文字集合の最初の文字として含めるとマッチングの対象にできます。

[] の間では、文字クラス (character classes) を指定できます。 指定には [: class :] という記法を使います。ここで class は POSIX.2 標準で定義されている以下のクラスのいずれかです:


alnum alpha ascii blank cntrl digit graph lower print punct space upper xdigit
文字クラスは、そのクラスの属する任意の文字にマッチします。

[] の間では、同値クラス (equivalence class) を指定できます。 指定には [= c =] という記法を使います。 これは現在のロケールにおける定義において c と同じ 照合重さ (collation weight) を持つ全ての文字にマッチします。

[] の間では、[. symbol .] という記述は照合シンボル symbol にマッチします。

組み込みコマンドの shopt を使ってシェルのオプション extglob が有効にされていると、 拡張パターンマッチング演算子がいくつか認識されるようになります。 以下の説明では、pattern-list| で区切られた 1 つ以上のパターンのリストであるものとします。 以下のサブパターンを 1 つあるいは複数使うことにより、 複合パターンを作れます。

?( pattern-list )
与えられたパターンが 0 回または 1 回現われるとマッチします。
*( pattern-list )
与えられたパターンが 0 回以上現われるとマッチします。
+( pattern-list )
与えられたパターンが 1 回以上現われるとマッチします。
@( pattern-list )
与えられたパターンのうち 1 つだけにマッチします。
!( pattern-list )
与えられたパターンいずれにも含まれないもの全てにマッチします。

クォートの削除

先に処理される展開の後、クォートされていない \ , ' ,3" のうち、先の展開の結果でないものは全て削除されます。

リダイレクト

シェルが解釈する特別な記法を用いると、コマンドの実行前に入出力を リダイレクト できます。またリダイレクトを使うと、 現在のシェル実行環境に対してファイルをオープンしたり クローズしたりできます。以下に示すリダイレクト演算子は、 単純なコマンド の前や途中に置くことができ、また コマンド の後に置けます。 リダイレクトは左から右へと、現われた順に処理されます。

以下の説明においては、ファイル・ディスクリプター番号が省略され、 かつリダイレクト演算子の最初の文字が < ならば、リダイレクトは標準入力 (ファイル・ディスクリプター 0) を参照します。 リダイレクト演算子の最初の文字が > ならば、リダイレクトは標準出力 (ファイル・ディスクリプター 1) を参照します。

以下の説明では、リダイレクト演算子の次の単語に対しては、 特に説明しない限り、 ブレース展開・チルダ展開・パラメータ展開・コマンド置換・ 算術式展開・クォート削除・パス名展開・単語分割が行われます。 ある単語が複数の単語に展開された場合はエラーになります。

リダイレクトの順番には意味がある点に注意してください。 例えば、次のコマンド

ls > dirlist 2>& 1

は標準出力と標準エラー出力を両方ともファイル dirlist に書き込みますが、次のコマンド

ls 2>& 1 > dirlist

では標準出力だけがファイル dirlist に書き込まれます。なぜなら後者の場合には、標準エラー出力は dirlist にリダイレクトされる前の標準出力の複製となるからです。

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 接続のオープンを試みます。 訳注 UDP connection というのはナンセンス?!?

ファイルのオープンや作成に失敗すると、リダイレクトも失敗します。

入力のリダイレクト

入力をリダイレクトすると、 word を展開した結果の名前を持つファイルがオープンされ、ファイル・ディスクリプター n で読み込めるようになります。 n が指定されていなければ、読み込みは標準入力 (ファイル・ディスクリプター 0) で行われます。

入力のリダイレクトは、一般的には以下の形式です:

[n ]< word

出力のリダイレクト

出力をリダイレクトすると、 word の展開した結果の名前を持つファイルがオープンされ、ファイル・ディスクリプター n で書き込めるようになります。 n が指定されていなければ、書きこみは標準出力 (ファイル・ディスクリプター 1) に行われます。 ファイルが存在しなかった場合は作成されます。 ファイルが存在した場合はサイズ 0 に切り詰められます。

出力のリダイレクトは、一般的には以下の形式です:

[n ]> word

リダイレクト演算子が > であり、かつ noclobber オプションが組み込みコマンド set に対して設定されている場合、word の展開で得たファイルが存在し、 かつそれが通常ファイルならば、リダイレクトは失敗します。 リダイレクト演算子が >| の場合や、 リダイレクト演算子が > で組み込みコマンド set に対する noclobber オプションが設定されていない場合、 word という名前のファイルが存在していてもリダイレクトが試みられます。

リダイレクトによる追加出力

この形式を使って出力のリダイレクトを行うと、 word を展開した結果の名前を持つファイルがオープンされ、ファイル・ディスクリプター n に対する出力がこのファイルに追加されるようになります。 n を指定しなければ、標準出力 (ファイル・ディスクリプター 1) で追加されます。 ファイルが存在しなければ、新しく作られます。

追加出力は一般的には以下の形式です:

[n ]>> word

標準出力と標準エラー出力のリダイレクト

この構造を使うと、 標準出力 (ファイル・ディスクリプター 1) と標準エラー出力 (ファイル・ディスクリプター 2) の両方を、 word を展開した結果の名前を持つファイルにリダイレクトできます。

標準出力と標準エラー出力に対する形式は 2 つあります:

&> word
および
>& word

両者のうち望ましいのは前者の方です。これは次のものと同じ意味です:

> word 2>& 1

ヒアドキュメント(Here Documents)

この形式のリダイレクトを用いると、 シェルは現在のソースから入力を読み込みます。 この読み込みは word を単独で含む行 (末尾にブランク文字があってはいけません) が現われるまで続きます。 その行までに読み込んだ行は、 コマンドの標準入力として扱われます。

ヒアドキュメントの形式を以下に示します:

<<[-]word
        here-document
delimiter

word に対するパラメータ展開・コマンド置換・算術式展開・ パス名展開は全く行われません。 word が一部でもクォートされている場合は、 delimiterword のクォートをほどいた結果 (クォート文字を削除した結果) となり、 ヒアドキュメントに含まれる行では展開が行われなくなります。 word がクォートされていなければ、 ヒアドキュメント中の全ての行に対して パラメータ展開・コマンド置換・算術式展開が行われます。 後者の場合には \<newline> という文字列は無視されます (出力から取り除かれます)。 また \ , $ , ` といった文字は \ を用いてクォートしなければなりません。

リダイレクト演算子が <<- ならば、行頭にあるタブ文字は全て入力行および delimiter を含む行から取り除かれます。 これにより、シェルスクリプト中のヒアドキュメントを 自然な形でインデントさせることができます。

ファイル・ディスクリプターの複製

リダイレクト演算子

[n ]<& word

を使うと入力ファイル・ディスクリプターを複製できます。 word が 1 桁以上の数値に展開された場合、 n で示されるファイル・ディスクリプターが生成され、 そのファイル・ディスクリプターのコピーとなります。 word に含まれる数値が入力のためにオープンされたファイル・ディスクリプターを 指していない場合、リダイレクト・エラーが起きます。 word を評価した結果が - となった場合、ファイル・ディスクリプター n はクローズされます。 n が指定されていない場合、標準入力 (ファイル・ディスクリプター 0) が使われます。

同様に、演算子

[n ]>& word

を使って出力ファイル・ディスクリプターを複製できます。 n が指定されていない場合は、標準出力 (ファイル・ディスクリプター 1) が使われます。 word に含まれる数値が、出力のためにオープンされた ファイル・ディスクリプターを指していない場合、 リダイレクト・エラーが起きます。特別な場合ですが、 n が省略され、かつ word が 1 桁以上の数字には展開されなかった場合、 前に説明したように標準出力と標準エラー出力がリダイレクトされます。

読み書きのためのファイル・ディスクリプターのオープン

リダイレクト演算子が

[n ]<> word

ならば、 word を展開した結果の名前を持つファイルがファイル・ディスクリプター n での読み書きのためにオープンされます。 n が指定されていなければ、 ファイル・ディスクリプター 0 で読み書きが行われます。 ファイルが存在しなければ、新しく生成されます。

エイリアス

エイリアス(alias) を使うと、 ある単語が単純なコマンドの先頭の単語として使われた場合に、 この文字列を別の単語に置換できます。 シェルはエイリアスのリストを管理しています。 このリストは組み込みコマンドの aliasunalias を使って設定および設定の取り消しできます (後述の シェルの組み込みコマンド を参照)。 各コマンドの最初の単語がクォートされていない場合、 エイリアスかどうかが確認され、 エイリアスならばその単語はそのエイリアスのテキストと置換されます。 エイリアス名と置換されるテキストには、 シェルの入力として有効なものは何でも含めることができます。 これには先に挙げた メタ文字 も含まれますが、 例外としてエイリアス名に = を含めることはできません。 置換されるテキストの最初の単語に対しても エイリアスかどうかの評価がされますが、 最初の単語が展開されるエイリアスと同じ場合には 展開は 1度しか行われません。つまり lsls -F のエイリアスとなっているような場合には、 bash は置換される文字列を再帰的に展開することはありません。 エイリアスの値の最後の文字が ブランク文字 の場合、エイリアスに続く次のコマンドの単語に対しても エイリアス展開が試みられます。

エイリアスは alias コマンドで作成とリスト表示を行い、 unalias コマンドで削除します。

置換されるテキストに引き数を入れる仕組みはありません。 引き数が必要ならば、シェル関数を使わなければなりません (後述の 関数 を参照)

シェルが対話的でない時には、 shopt コマンドによって expand_aliases オプションが設定されていない場合に限り、 エイリアスの展開は行われません (後述の シェルの組み込みコマンド における shopt の説明を参照)。

エイリアスの定義や利用に関係する規則には、紛らわしい点があります。 bash は、ある行に書かれているコマンドを実行する前に必ず、 少なくとも 1 回は行全体を読み込みます。 エイリアスが展開されるのはコマンドを読み込んだ時であり、 実行する時ではありません。 したがって、別のコマンドと同じ行でエイリアス定義を行った場合には、 次の入力行が読み込まれるまではエイリアスの効果は現われません。 同じ行にあるエイリアス定義の後のコマンドは、 新しいエイリアスの影響を受けません。 この動作は関数を実行する場合にも問題になります。 エイリアスが展開されるのは関数定義が読み込まれる時であり、 関数が実行される時ではありません。 なぜなら、関数定義自身も複合コマンドだからです。 その結果として、関数内で定義されたエイリアスは、 その関数が実行されるまでは利用できません。 安全のため、エイリアス定義は独立した行で行うべきです。 複合コマンド内で alias を使ってはいけません。

ほとんど全ての用途において、 シェル関数でエイリアスを代用できます。

関数

シェル関数は、後で使うために一連のコマンドを保存するものです。 シェル関数の定義は既に シェルの文法 で説明しています。 シェル関数名が単純なコマンド名として使われた場合、 関数名に対応するコマンド群が実行されます。 関数は現在のシェルのコンテキスト内で実行されます。 つまり、新しいプロセスを生成して関数を処理することはありません (これはシェルスクリプトと対照的な点です)。 関数の実行中には、関数に与えた引き数が位置パラメータとなります。 特殊パラメータ # は更新され、この変更が反映されます。 位置パラメータ 0 は変わりません。 関数の実行中は FUNCNAME 変数に関数の名前が設定されます。 シェル実行環境の状態は全て、関数とその呼び出し側で同じになりますが、 例外として DEBUG トラップ (後述の シェルの組み込みコマンド の項で、組み込みコマンド trap の説明を参照) は継承されません。

関数ローカルの変数は、組み込みコマンド local で宣言できます。 普通は、変数とその値は関数とその呼び出し側で共有されます。

組み込みコマンド return が関数中で実行された場合、関数は終了し、 関数呼び出しの次のコマンドから実行が再開されます。 関数の終了時には、位置パラメータの値と特殊パラメータ # の値は、関数の実行前の値に戻ります。

関数の名前と定義をリスト表示するには、組み込みコマンドの declaretypeset を、オプション -f を付けて実行します。 declaretypeset をオプション -F で実行すると、関数名だけがリスト表示されます。 関数をエクスポートして、 サブシェルでその関数が自動的に定義されている状態にできます。 これを行うには、組み込みコマンドの export-f オプションを付けて実行します。

関数は再帰させることができます。 再帰呼び出しの回数には制限はありません。

算術式評価

シェルにおいては、特定の状況下で算術式を評価させることができます (組み込みコマンドの let算術式展開 を参照)。 評価は long 型の整数として行われ、 オーバーフローのチェックは行われません。 ただし、0 での除算はトラップされ、エラーとしてのフラグが立てられます。 演算子とその優先度、結合規則は C 言語と同じです。 以下のリストは、 同じ優先度を持つ演算子をグループとしてまとめて列挙したものです。 優先度の高いものから順に列挙しています。

id ++ id --
変数を評価し、その後 increment (加算)/ decrement (減算) する。
++id --id
変数を increment (加算) / decrement (減算) してから評価する。
- +
単項式の負と正
! ~
論理的否定とビット単位の否定
**
指数 (累乗)
* / %
乗算、除算、剰余
+ -
加算と減算
<< >>
左ビットシフトと右ビットシフト
<= >= < >
比較
== !=
等値と非等値
&
ビット単位の AND
^
ビット単位の排他的 OR
|
ビット単位の OR
&&
論理的 AND
||
論理的 OR
expr ?expr :expr
条件付き実行
= *= /= %= += -= <<= >>= &= ^= |=
代入
expr1 , expr2
コンマ

シェル変数をオペランドにすることもできます。 パラメータ展開は式の評価より前に行われます。 式の中では、パラメータの値は long 型の整数に強制的に変換されます。 式の中では、シェル変数を (パラメータ展開規則を用いずに) 変数名で参照できます。 変数の値は変数が参照された際に算術式として評価されます。 式で用いるためにシェル変数の整数属性を有効にする必要はありません。

先頭が 0 である定数は 8 進数として解釈されます。 先頭が 0x または 0X ならば 16 進数として解釈されます。 それ以外の場合には、数値は [base# ]n の形式で表します。ここで base は 2 から 64 の間の 10 進数であり、算術的な意味での基数を表します。 n はその基数における数を表します。 ある桁において 9 より大きい数字を表すには文字を使います。 文字を使う場合には、アルファベット小文字、大文字、_, @ をこの順番で使います。 base が 36 以下の場合には、大文字と小文字は区別されず、 大文字と小文字のどちらを使っても 10 から 35 までの数字を表現できます。

演算子は優先度の順に評価されます。括弧内にある部分式は最初に評価され、 前述の優先規則よりも優先させることができます。

条件式

条件式は複合コマンド

typeset [-afFirx ] [-p ] [name [=value ]]
変数を宣言したり、変数に属性を与えたりします。 name を指定しなければ、変数の値が表示されます。 -p オプションを指定すると、 name それぞれの属性と値が表示されます。 -p を使うと他のオプションは無視されます。 -F オプションを指定すると、関数定義の表示を止めます。 関数の名前と属性だけが出力されます。 -F オプションを指定すると、 -f オプションも指定したことになります。以下のオプションを使うと、 指定した属性を持つ変数の出力を制限したり、 変数に属性を与えたりできます:
-a
name はそれぞれ配列変数 (前述の 配列 を参照) です。
-f
関数名だけを使います。
-i
変数を整数として扱います。変数に値が代入された時に算術式評価 ( 算術式評価 を参照) が実行されます。
-r
name を読み込み専用にします。 これ以降、代入文を用いて値を代入したり unset したりできなくなります。
-x
name に印を付け、 これ以降に実行するコマンドに環境経由でエクスポートします。

`-' ではなく `+' を使うと属性を消します。 ただし例外として、+a を使って配列変数を破棄することはできません。 関数内で使った場合、 local コマンドを使った場合と同様に name はローカルとなります。 返り値は基本的には 0 ですが、不正なオプションに出会った場合、 ``-f foo=bar''を使って関数を定義しようとした場合、 読み込み専用の変数に代入しようとした場合、 複合代入構文を使わずに配列変数に値を代入しようとした場合 (前述の 配列 を参照)、name のいずれかが正しいシェル変数名でない場合、 読み込み専用変数の読み込み専用属性を無効にしようとした場合、 存在しない関数を -f オプションで表示しようとした場合は除きます。

dirs [-clpv ] [+n ] [-n ]
オプションが無いときは、 現在記憶しているディレクトリのリストが表示されます。 デフォルトでは、全てのディレクトリ名は空白で区切って 1 行で表示されます。ディレクトリは pushd コマンドによってリストに追加されます。 popd コマンドはリストからエントリを削除します。
+ n
オプション無しで dirs を起動した時に表示されるリストの、 左から数えて n 番目のエントリを表示します。 エントリは 0 から始まります。
- n
オプション無しで dirs を起動した時に表示されるリストの、 右から数えて n 番目のエントリを表示します。 エントリは 0 から始まります。
-c
全てのエントリを削除し、ディレクトリスタックをクリアします。
-l
長い形式のリスト表示を行います。 デフォルトのリスト表示フォーマットでは、 チルダを使ってホームディレクトリを表します。
-p
1 行に 1 エントリの形でディレクトリスタックを出力します。
-v
1 行に 1 エントリの形でディレクトリスタックを出力します。 各エントリの前にはスタック内での番号が表示されます。

不正なオプションが与えられた場合とインデックス n がディレクトリスタックの終端を越えている場合を除き、 返り値は 0 となります。

disown [-ar ] [-h ] [jobspec ...]
オプション無しの場合には、それぞれの jobspec がアクティブなジョブのテーブルから削除されます。 -h オプションが与えられている場合、どの jobspec もテーブルから削除されず、 シェルが SIGHUP を受け取ってもそのジョブには SIGHUP が送られないように印が付けられます。 jobspec がなく、かつ -a オプションも -r オプションも与えられていない場合には、カレントジョブ が使われます。 jobspec が与えられていない場合、 -a オプションは全てのジョブを削除するか 全てのジョブに印を付けるという意味 となります。 jobspec 引き数なしで -r オプションを指定すると、 実行中のジョブだけが操作の対象となります。 jobspec が不正なジョブを指定していなければ、返り値は 0 となります。
echo [-neE ] [arg ...]
arg を空白で区切って出力し、最後に改行を出力します。 終了ステータスは常に 0 です。 -n が指定された場合、最後の改行は出力されません。 -e オプションを指定した場合、 以下に示す、バックスラッシュのエスケープ文字が解釈されるようになります。 -E オプションを指定すると、 デフォルトでこのようなエスケープ文字が解釈されるシステムであっても、 エスケープ文字が解釈されないようになります。 xpg_echo シェルオプションを用いると、 echo がこれらのエスケープ文字を展開するかどうかの デフォルト動作を動的に決定できます。 echo-- をオプションの終わりと解釈しません。 echo は以下のエスケープシーケンスを解釈します:
\a
警告(ベル)
\b
バックスペース
\c
行末に改行を付けない
\e
エスケープ文字
\f
フォームフィード文字
\n
改行
\r
復帰文字
\t
水平タブ
\v
垂直タブ
\\
バックスラッシュ
\nnn
ASCII コードの 8 進値が nnn である文字 (1 文字につき数字 3 桁)。
\xnnn
ASCII コードの 16 進値が nnn である文字 (1 文字につき数字 3 桁)。
enable [-adnps ] [-f filename ] [name ...]
組み込みコマンドの有効/無効を設定します。 シェルは通常はディスクコマンドの前に組み込みコマンドを探しますが、 組み込みコマンドを無効にすると、 シェルの組み込みコマンドと同じ名前を持つディスクコマンドを、 完全なパス名を指定しなくても実行できます。 -n を用いると、それぞれの name は無効となります。 それ以外の場合には、name は有効となります。 例えば、シェル組み込みのものでなく PATH 上にある test バイナリを使うには enable -n test.を実行します。 -f オプションは新しい組み込みコマンド name を共有オブジェクト filename からロードするという意味です。 これは動的ロードをサポートしているシステムで使えます。 -d オプションは、以前に -f オプションでロードした組み込みコマンドを削除します。 引き数 name が与えられなかった場合や、 -p オプションが与えられた場合、 シェルの組み込みコマンドのリストが表示されます。 他にオプション引き数が指定されていない場合には、 有効になっているシェル組み込みコマンド全てからなるリストが表示されます。 -n を与えると、無効にされている組み込みコマンドだけが出力されます。 -a を与えると、 それぞれ有効かどうかの表示付きで全ての組み込みコマンドが出力されます。 -s を与えると、出力されるのは POSIX の特殊 組み込みコマンドだけに制限されます。 name がシェル組み込みコマンドでない場合と、 共有オブジェクトからの新しい組み込みコマンドのロードに失敗した場合を除き、 返り値は 0 となります。
eval [arg ...]
arg を読み込み、結合して 1 つのコマンドにされます。 次にシェルはこのコマンドを読み込んで実行し、 その終了ステータスが eval の値として返されます。 args が無い場合や空の引き数しかない場合には eval は 0 を返します。
exec [-cl ] [-a name ] [command [arguments ]]
command が指定されていると、シェルはこのコマンドに置き換えられます。 新しいプロセスは生成されません。 argumentscommand に対する引き数となります。 -l オプションを与えると、シェルは command に渡す 0 番目のオプションの先頭にダッシュを設定します。 これは login (1)が行う動作です。 -c オプションを与えると、 command は空の環境で実行されます。 -a を与えると、シェルは実行するコマンドに 0 番目の引き数として name を渡します。何らかの理由で command が実行できない場合には非対話的シェルは終了します。 ただしシェルオプション execfail が設定されている場合は終了せず、この場合には偽が返されます。 ファイルが実行できない場合には、対話的シェルは偽を返します。 command が指定されていない場合、任意のリダイレクトはカレントシェルで効果を表し、 終了ステータスは 0 となります。 リダイレクトのエラーが起きた場合には、終了ステータスは 1 となります。
exit [n ]
ステータス n でシェルを終了させます。 n を省略すると、 終了ステータスは最後に実行したコマンドの終了ステータスとなります。 シェルが終了する前には、 EXIT に対するトラップが実行されます。
export [-fn ] [name [=word ]] ...
export -p
与えられた name には印が付けられ、 これ以降に実行するコマンドの環境に 自動的にエクスポートされるようになります。 -f オプションを与えると、 name は関数を参照します。 name を与えなかった場合や、 -p オプションを与えた場合には、 このシェル内でエクスポートされている全ての名前のリストが出力されます。 -n オプションを与えると、指定した変数からエクスポート属性が取り除かれます。 不正なオプションがあった場合、 name のいずれかが不正なシェル変数名であった場合、 関数でない名前に対して -f オプションを与えた場合を除き、 export は終了ステータス 0 を返します。
fc [-e ename ] [-nlr ] [first ] [last ]
fc -s [pat =rep ] [cmd ]
フィックスコマンド (Fix Command)。 最初の形式では、 first から last までの範囲のコマンドが履歴リストから選択されます。 firstlast は文字列 (その文字列で始まる最後のコマンド) や 数値 (履歴リスト中でのインデックス。 負の値は現在のコマンド番号からのオフセットとして扱われます) としても指定できます。 last が指定されていなければ、リスト表示の場合には現在のコマンドが設定され (したがって ``fc -l -10''で最近のコマンド 10 個が出力されます)、それ以外の場合には first が設定されます。 first が指定されていなければ、編集の場合には前のコマンドが設定され、 リスト表示の場合には -16 が設定されます。
-n オプションを与えるとリストにコマンド番号が付きません。 -r オプションを与えるとコマンドの順序が逆になります。 -l オプションを与えると、コマンドは標準出力にリスト表示されます。 それ以外の場合には、これらのコマンドが書かれたファイルに対し、 ename で指定したエディタが起動されます。 ename が与えられていない場合は、変数 FCEDIT の値が使われ、 FCEDIT も設定されていない場合には EDITOR の値が使われます。 どちらの変数も設定されていなければ、 が使われます。 編集が終了すると、編集されたコマンドがエコー表示され、実行されます。
2 番目の形式では、pat の部分をそれぞれ rep で置き換えた後に command が再実行されます。 これを利用している便利なエイリアスに ``r=fc -s''があります。 これを用いると ``r cc''と入力すれば ``cc''で始まる最も新しいコマンドを実行でき、 ``r''の入力すれば直前のコマンドを再実行できます。
最初の形式を用いた場合、不正なオプションがあるか、 first または last が履歴行の範囲外を指定していなければ、返り値は 0 となります。 -e オプションが与えられた場合、 返り値は最後に実行されたコマンドの返り値となるか、 あるいはコマンドの一時ファイルでエラーが起きた場合には偽となります。 2 番目の形式を用いた場合、 終了ステータスは再実行されたコマンドの終了ステータスとなります。 ただし、 cmd が有効な履歴行を指定していない場合は別で、この場合には fc は偽を返します。
fg [jobspec ]
jobspec の実行をフォアグラウンドで再開し、これをカレントジョブとします。 jobspec が無い場合、シェルが記録しているカレントジョブ が使われます。 返り値はフォアグラウンドで再開されたコマンドの返り値ですが、 ジョブ制御が無効であるときに実行した場合や、 ジョブ制御が有効であっても jobspec が有効なジョブを指定していない場合や jobspec がジョブ制御無しで実行したジョブを指定している場合には偽となります。
getopts optstring name [args ]
getopts はシェルの手続きが位置パラメータを解釈するために使います。 optstring は識別の対象であるオプション文字列です。 ある文字の後にコロンがある場合、 そのオプションは引き数を取ることが期待されます。 引き数は空白でオプション文字と区切られていなければなりません。 コロンと疑問符はオプション文字として使えません。 呼び出される度に、 getopts は次に見つかったオプションをシェル変数 name に格納し ( name が存在しなければ初期化を行います)、 次に処理される引き数のインデックスを変数 OPTIND に格納します。 OPTIND はシェルまたはシェルスクリプトが呼び出される度に 1 に初期化されます。 オプションが引き数を必要とする場合には、 getopts はその引き数を変数 OPTARG に格納します。 シェルが OPTIND を自動的に再設定することはありません。 1 つのシェルが呼び出されている間に別のパラメータの組合せを使う場合には、 getopts の呼び出しの間に手動で再設定を行わなければなりません。
オプションの終わりに到達すると、 getopts は 0 より大きい返り値で終了します。 OPTIND にはオプションでない最初の引き数のインデックスが設定され、 name には ? が設定されます。
getopts は通常位置パラメータを展開しますが、他の引き数が args に指定されている場合には、 getopts は位置パラメータでなくこれらを展開します。
getopts は 2 通りの方法でエラーを報告できます。 optstring の最初の文字がコロンならば、 静かな (silent) エラー報告が行われます。 通常の操作では、不正なオプションがある場合や オプションの引き数が足りない場合に診断メッセージが出力されます。 変数 OPTERR に 0 が設定されている場合、エラーメッセージは全く出力されません。 これは、 optstring の最初の文字がコロンでなくても同じです。
不正なオプションがあった場合、 getopts は ? を name に設定します。 さらに、静かなモードでない場合にはエラーメッセージが出力され、 OPTARG の設定が取り消されます。 getopts が静かなモードであれば、見つかったオプション文字は OPTARG に設定され、診断メッセージは出力されません。
必要な引き数が見つからず、かつ getopts が静かなモードでない場合には、疑問符 (? ) が name に設定され、 OPTARG の設定が取り消され、診断メッセージが出力されます。 getopts が静かなモードならば、コロン (: ) が name に設定され、 OPTARG には見つかったオプション文字が設定されます。
(指定の有無に関係なく) オプションが見つかった場合、 getopts は真を返します。 オプションの最後に到達した場合や、エラーが起きた場合には、 getopts は偽を返します。
hash [-r ] [-p filename ] [name ]
name それぞれに対して、 $PATH 内のディレクトリの検索を行ってコマンドの完全なファイル名を調べ、 その結果を記憶します。 -p オプションが指定されると、パス検索は実行されず、 filename がそのコマンドの完全なファイル名として使われます。 -r オプションを与えると、シェルは記憶している位置を全て忘れます。 引き数が与えられていない場合は、 記憶しているコマンドに関する情報が出力されます。 name が見つからない場合と不正なオプションが与えられた場合を除き、 返却ステータスは真となります。
help [-s ] [pattern ]
組み込みコマンドのヘルプ情報を表示します。 pattern が指定された場合には、 help はこの pattern にマッチする全てのコマンドに関する詳しいヘルプを出力します。 それ以外の場合には、 全ての組み込みコマンドと制御構造についての説明が出力されます。 -s オプションは、表示されるヘルプ情報を短い書式の使用法に限定します。 pattern にマッチするコマンドが全くない場合を除き、返却ステータスは 0 です。
history [n ]
history -c
history -d offset
history -anrw [filename ]
history -p arg [arg ... ]
history -s arg [arg ... ]
オプションがない場合には、行番号付きでコマンド履歴を表示します。 * 付きでリスト表示されている行は変更された行です。 引き数 n を指定すると、最新の n 行だけがリスト表示されます。 filename が与えられている場合、 これは履歴ファイルの名前として使われます。 これが与えられていない場合には HISTFILE の値が使われます。(指定されていれば) オプションは以下の意味を持ちます:
-c
履歴リストの全てのエントリを削除し、クリアします。
-d offset
offset 番目にある履歴エントリを削除します。
-a
「新しい」履歴行 (bash の現在のセッションの開始以来入力された履歴行) を履歴ファイルに追加します。
-n
まだ履歴ファイルから読み込んでいない履歴行を 現在の履歴リストに読み込みます。 これらは、bash の現在のセッションの開始以降に 履歴ファイルに追加された行です。
-r
履歴ファイルの内容を読み込み、これらを現在の履歴として用います。
-w
現在の履歴を履歴ファイルに書き込みます。履歴ファイルの内容は上書きされます。
-p
後に続く args に対して履歴置換を行い、 その結果を標準出力に表示します。 この結果は履歴リストには格納されません。 通常の履歴展開が行われないようにするため、 arg はそれぞれクォートしなければなりません。
-s
args を 1 つのエントリとして履歴リストに格納します。 履歴リストの最後のコマンドは、 args が追加される前に削除されます。

不正なオプションがある場合、 履歴ファイルの読み書きの間にエラーが起きた場合、 -d オプションの引き数として不正な offset の値が与えられた場合、 -p オプションの引き数として与えられた履歴展開が失敗した場合を除き、 返り値は 0 になります。

jobs [-lnprs ] [ jobspec ... ]
jobs -x command [ args ... ]
最初の形式を実行すると、アクティブなジョブがリスト表示されます。 オプションは以下の意味を持ちます:
-l
通常の情報に加えて、プロセス ID をリスト表示します。
-p
そのジョブが属するプロセスグループのリーダーのプロセス ID だけを表示します。
-n
ユーザがステータスを最後に通知されて以来、 ステータスの変更があったジョブに関する情報だけを表示します。
-r
実行中のジョブだけを出力します。
-s
停止中のジョブだけを出力します。

jobspec が与えられている場合、 そのジョブに関する情報だけが出力されるます。 不正なオプションがある場合や、不正な jobspec が与えられた場合を除き、返却ステータスは 0 です。

-x オプションが与えられた場合、 jobscommandargs 中で見つかった jobspec を全て対応するプロセスグループ ID に置き換え、 args を渡して command を実行し、その終了ステータスを返します。

kill [-s sigspec | -n signum | - sigspec ] [pid | jobspec ] ...
kill -l [sigspec | exit_status ]
sigspec または signum で指定されたシグナルを、 pid または jobspec で指定されたプロセスに送ります。 sigspec SIGKILL のようなシグナル名、またはシグナルの番号です。 signum はシグナルの番号です。 sigspec がシグナル名ならば、その名前には SIG プレフィックスはあっても無くても構いません。 sigspec が無い場合には、 SIGTERM が指定されたものとします。 引き数に -l を与えるとシグナル名がリスト表示されます。 -l と同時に引き数を与えると、 引き数に対応するシグナルの名前がリスト表示され、 返却ステータスは 0 となります。 -l に対する引き数 exit_status は、 シグナル番号、またはシグナルによって終了させられた プロセスの終了ステータスを指定する数です。 少なくとも 1 つのシグナルを正常に送れた場合、 kill は真を返します。 エラーが起きた場合や不正なオプションがあった場合には、 kill は偽を返します。
let arg [arg ...]
arg は評価される算術式です ( 算術式展開 を参照)。 最後の arg を評価した結果が 0 であれば、 let は 1 を返します。 それ以外の場合には 0 が返されます。
local [option ] [name [=value ] ...]
それぞれの引き数に対して name という名前のローカル変数が生成され、 value が代入されます。 option には、 declare コマンドに使えるオプションがすべて使えます。 関数内で local を使った場合、この変数 name の可視スコープは、この関数とこの関数の子に制限されます。 オペランドが無い場合、 local はローカル変数の一覧を標準出力に出力します。 関数の内部以外で local を使うとエラーになります。 local が関数の外部で使われたり、 不正な name が与えられたり、 name が読み取り専用であったりしなければ、 local の返却ステータスは 0 となります。
logout
ログインシェルを終了します。
popd [-n ] [+n ] [-n ]
ディレクトリスタックからエントリを削除します。 引き数が無い場合には、スタック先頭のディレクトリが削除され、 新しく先頭となったディレクトリへの cd が実行されます。 引き数が指定された場合には、これは以下の意味を持ちます:
+ n
dirs で表示されるリストの左から数えて n 番目のエントリを削除します。 エントリは 0 から数えます。例えば、 ``popd +0''は最初のディレクトリを削除し、 ``popd +1''は 2 番目のディレクトリを削除します。
- n
dirs で表示されるリストの右から数えて n 番目のエントリを削除します。 エントリは 0 から数えます。例えば、 ``popd -0''は最後のディレクトリを削除し、 ``popd -1''は最後の 1 つ前のディレクトリを削除します。
-n
スタックからディレクトリを削除する際に、 通常のディレクトリ変更を行いません。 したがって、スタックだけが操作されます。

popd コマンドが成功すれば、 dirs も実行され、返却ステータスは 0 となります。 popd が偽を返すのは、不正なオプションがあった場合・ ディレクトリスタックが空の場合・ ディレクトリスタックの存在しないエントリが指定された場合・ ディレクトリ変更に失敗した場合です。

printf format [arguments ]
arguments を整形して標準出力に書き出します。 フォーマットは format で制御します。 format は 3 つのタイプのオブジェクトを含む文字列です。 3 つのオブジェクトとは、(そのまま標準出力にコピーされる) プレーン文字・ (変換されて標準出力にコピーされる) 文字エスケープシーケンス・ (その後に続く引き数 argument それぞれの表示に用いられる) 表示フォーマット指定、です。 printf (1) 標準のフォーマット以外に、以下のフォーマットが使えます。 %b を用いると、printf は対応する argument 中の バックスラッシュのエスケープシーケンスを展開します。 また %q を用いると、printf は対応する argument をシェルの入力として再利用できるフォーマットで出力します。
format は必要に応じて再利用され、 全ての arguments を処理します。 与えられたよりも多くの argumentsformat が必要とする場合、余分のフォーマット指定は、 0 と空文字列のうち、適切な方が指定されたかのように動作します。 成功した場合の返り値は 0 で、失敗した場合の返り値は 0 以外です。
pushd [-n ] [dir ]
pushd [-n ] [+n ] [-n ]
ディレクトリをディレクトリのスタックに追加するか、 スタックをローテートさせます。 この時、新しいスタックの最も上にあるものを カレントの作業ディレクトリにします。 引き数を与えなければ、 一番上の 2 つのディレクトリを交換し、0 を返します。 ただし、ディレクトリスタックが空の場合を除きます。 引き数を与えた場合には、以下の意味を持ちます:
+ n
スタックをローテートさせ、n 番目のディレクトリを一番上にします。 このとき dirs が表示するリストは左から数え始め、その左端は 0 となります。
- n
スタックをローテートさせ、n 番目のディレクトリを一番上にします。 このとき dirs が表示するリストは右から数え始め、その右端は 0 となります。
-n
ディレクトリをスタックに追加した時に、 通常のディレクトリ変更を行いません。 したがって、スタックだけが操作されます。
dir
dir をディレクトリスタックの一番上に追加します。 また、このディレクトリを新しいカレントの作業ディレクトリにします。

pushd コマンドが成功すると、 dirs コマンドも実行されます。 最初の形式を使った場合、 dir への cd が失敗しなければ、 pushd は 0 を返します。 2 番目の形式を使った場合にも、 pushd は基本的には 0 を返します。 ただし、ディレクトリスタックが空の場合・ ディレクトリスタックの存在しない要素が指定された場合・ 指定された新しいカレントディレクトリへの ディレクトリ変更が失敗した場合は除きます。

pwd [-LP ]
現在の作業ディレクトリの絶対パス名を出力します。 -P オプションが指定された場合や、組み込みコマンド set-o physical オプションが有効になっている場合には、 出力されるパス名にはシンボリックリンクは含まれません。 -L オプションを使うと、 出力されるパス名にはシンボリックリンクが含まれているかもしれません。 カレントディレクトリの名前を読む際にエラーが起きたり、 不正なオプションが与えられなければ、返却ステータスは 0 となります。
read [-ers ] [-t timeout ] [-a aname ] [-p prompt ] [-n nchars ] [-d delim ] [name ...]
標準入力から 1 行を読み込み、最初の単語を最初の name に代入し、2 番目の単語を 2 番目の name に代入します。以降も同様です。 余った単語とそれらの間の区切り文字は、最後の name に代入されます。 name よりも標準入力から読み込んだ単語の方が少ない場合には、 余っている name には空文字列が値として代入されます。 IFS 中の文字が、行を単語に分割するために使われます。 バックスラッシュ文字 (\ ) を使うと、 次に読み込んだ文字の特殊な意味を消したり、行を連結したりできます。 オプションが与えられていれば、以下の意味を持ちます:
-a aname
単語を配列変数 aname にインデックス順に代入します。インデックスは 0 から始まります。 新しい値が代入される前には、 aname の設定は消されます。他の name 引き数は無視されます。
-d delim
改行ではなく、delim の最初の文字が、入力行を終了するために使われます。
-e
標準入力を端末から読み込む場合、 readline (前述の READLINE ライブラリ のセクションを参照) を使って行を取得します。
-n nchars
組み込みコマンド read は、 入力行全体が読み込まれるのを待たず、 文字 nchars を読み込んだ時に戻ります。
-p prompt
入力を読み込もうとする前にプロンプト を表示します。 末尾に改行は付きません。 プロンプトが表示されるのは、入力を端末から読み込む場合だけです。
-r
バックスラッシュはエスケープ文字として作用しません。 バックスラッシュは行の一部と見なされます。 特に、バックスラッシュと改行の組合せを使って 複数の行を接続することはできません。
-s
静かな (silent) モード。端末に入力が行われても、文字はエコーされません。
-t timeout
入力行全体が timeout 秒以内で読み込まれない場合、 read をタイムアウトさせて、失敗の状態を返します。 このオプションは、 read が入力を端末やパイプから読み込んでいない場合、 何も効果がありません。

name が全く与えられていない場合、読み込まれた行は変数 REPLY に代入されます。ファイル末尾に到達したり read がタイムアウトしたりしなければ、終了コードは 0 です。

readonly [-apf ] [name ...]
指定された name に読み込み専用の印を付けます。 それ以降は、このような name の値を変更することはできません。 -f オプションを与えた場合、name に対応する関数に同様の印が付きます。 -a オプション与えると、配列変数だけが対象となります。 name 引き数が全く与えられてない場合、または -p オプションが与えられた場合、読み込み専用の名前全ての一覧が出力されます。 -p オプションを使うと、 入力として再利用できるようなフォーマットで出力が行われます。 返却ステータスは基本的に 0 ですが、 不正なオプションがあった場合、 name のいずれかが有効なシェル変数名で無かった場合、 -f オプションに関数でない name を与えた場合は除きます。
return [n ]
指定した返り値 n で関数を終了させます。 n を省略すると、返却ステータスは 関数内で最後に実行したコマンドの返却ステータスになります。 関数の外側で使われているが、 . (source ) コマンドによるスクリプトの実行中である場合、 シェルはそのスクリプトの実行を止め、 n またはスクリプト内で最後に実行されたコマンドの終了ステータスを スクリプトの終了ステータスとして返します。 関数の外側で . によるスクリプトの実行中以外に使われた場合、 返却ステータスは偽となります。
set [--abefhkmnptuvxBCHP ] [-o option ] [arg ...]
オプション無しの場合は、シェル変数全ての名前と値の組が表示されます。 表示は、入力として再利用できるフォーマットで行われます。 出力は現在のロケールに従ってソートされます。 オプションが指定されている場合、 オプションはシェルの属性を設定または解除します。 オプションが処理された後に残っている引き数があれば、 これは位置パラメータの値として扱われ、 $1 , $2 , ... $n の順に代入されます。 オプションが指定されていれば、以下の意味を持ちます:
-a
値を変更したり新規に設定したりした変数および関数が、 自動的に (後に実行するコマンドの) 環境として エクスポートされるようになります。
-b
終了したバックグラウンドジョブのステータス報告を、 次のプライマリプロンプトの前ではなく、即座に行います。 これはジョブ制御が有効な場合に限り有効です。
-e
単純なコマンド (前述の シェルの文法 セクションを参照) が 0 でないステータスで終了した場合、即座に終了します。 ただし失敗したコマンドが until または while ループの一部である、 if 文の一部である、 && または || リストの一部である、 コマンドの返り値が ! で反転されている、のいずれかの場合にはシェルは終了しません。
-f
パス名展開を無効にします。
-h
コマンドの位置を記憶し、実行時にこれを引きます。 これはデフォルトで有効になっています。
-k
代入文の形式を持つ全ての引き数を、コマンドに対する環境に追加します。 環境変数となるのは、コマンド名の前にあるものに限りません。
-m
監視モード。ジョブ制御は有効になります。ジョブ制御 (前述の ジョブ制御 セクションを参照) をサポートしているシステム上の対話的シェルでは、 このオプションはデフォルトで有効です。 別のプロセスグループで実行されたバックグラウンドプロセスと、 これらの終了ステータスが書かれた行が、プロセスの終了時に表示されます。
-n
コマンドを読み込みますが実行はしません。 これを使うとシェルスクリプトの文法エラーをチェックできます。 このオプションは対話的シェルでは無視されます。
-o option-name
option-name には、以下のいずれかを指定できます:
allexport
-a と同じです。
braceexpand
-B と同じです。
emacs
emacs 形式のコマンド行編集インタフェースを使います。 これはシェルが対話的な場合には、デフォルトで有効です。 ただし、 --noediting オプション付きでシェルを実行した場合は除きます。
errexit
-e と同じです。
hashall
-h と同じです。
histexpand
-H と同じです。
history
コマンド履歴を有効にします。コマンド履歴については 履歴 セクションで説明しています。 このオプションは、対話的シェルではデフォルトで有効です。
ignoreeof
効果は、シェルコマンドの IGNOREEOF=10を実行した場合と同様です (前述の シェル変数 を参照)。
keyword
-k と同じです。
monitor
-m と同じです。
noclobber
-C と同じです。
noexec
-n と同じです。
noglob
-f と同じです。
notify
-b と同じです。
nounset
-u と同じです。
onecmd
-t と同じです。
physical
-P と同じです。
posix
bash の動作を変えます。 デフォルトの操作は POSIX 1003.2 標準と異なりますが、 これを標準に準拠するようにします (posix モード )。
privileged
-p と同じです。
verbose
-v と同じです。
vi
vi 形式のコマンド行編集インタフェースを使います。
xtrace
-x と同じです。

option-name 無しで -o オプションを与えた場合、現在のオプションが出力されます。 option-name 無しで +o オプションを与えた場合、現在のオプション設定を再生成する set コマンドの列が標準出力に出力されます。

-p
特権 (privileged) モードを有効にします。このモードでは $ENV $BASH_ENV ファイルは処理されず、シェル関数は環境から継承されず、 SHELLOPTS 環境変数は定義されていても無視されます。 シェルを起動した時に実効ユーザ (グループ) ID が 実ユーザ (グループ) ID と異なり、 かつ -p オプションが与えられていない場合、 これらの動作が行われ、実効ユーザ ID には実ユーザ ID が設定されます。 起動時に -p オプションが与えられた場合、 実効ユーザ ID は再設定されません。 このオプションを無効にすると、 実効ユーザ ID と実効グループ ID には 実ユーザ ID と 実グループ ID が設定されます。
-t
コマンドを 1 つ読み込み、実行してから終了します。
-u
パラメータ展開の実行中に、設定が取り消されている変数をエラーとして扱います。 設定が取り消されている変数を展開しようとした場合、 シェルはエラーメッセージを出力します。 シェルが対話的でなければ、0 でないステータスで終了します。
-v
シェルの入力行を、読み込んだ際に表示します。
-x
単純なコマンド をそれぞれ展開した後、 PS4 を展開した値を表示し、その後にそのコマンドと展開した引き数を表示します。
-B
シェルはブレース展開 (前述の ブレース展開 を参照) を実行します。これはデフォルトで有効です。
-C
設定されている場合、 bash はリダイレクト演算子 > , >& , <> で既存のファイルを上書きしません。 上書きができるのは、リダイレクト演算子 >|> の代わりに使った時です。
-H
! 形式の履歴置換を有効にします。 このオプションは、シェルが対話的な時にはデフォルトで有効です。
-P
設定されている場合、 cd のような現在の作業ディレクトリを変更するコマンドを実行する時に、 シェルはシンボリックリンクを辿りません。 代わりに物理的ディレクトリ構造が使われます。 デフォルトでは、 bash がカレントディレクトリを変更するコマンドを実行する際には、 ディレクトリの論理的な接続が辿られます。
--
このオプションの後に引き数が続いていない場合には、 位置パラメータの設定が取り消されます。 それ以外の場合には、位置パラメータに arg の残りが設定されます。 これらに - で始まるものが含まれていても、 オプションではなく位置パラメータとして扱われます。
-
オプションの終わりを示します。 残りの arg は全て位置パラメータに代入されます。 -x オプションと -v オプションは無効になります。 arg が無い場合には、位置パラメータの内容は変化しません。

特に断らない限り、各オプションはデフォルトで無効になっています。 - の代わりに + を使うと、これらのオプションは無効になります。 オプションはシェルを起動する際の引き数としても指定できます。 現在のオプションの集合は、 $- で知ることができます。 不正なオプションが無ければ、終了ステータスは必ず真となります。

shift [n ]
n +1 ... からの位置パラメータの名前を変え、 $1 ... とします。 $# から $# -n +1 までの数字で表される パラメータは unset されます。 n は 0 以上 $# 以下の数でなければなりません。 n が 0 ならば、どのパラメータも変更されません。 n が与えられない場合には、1 が指定されたものと見なされます。 n$# より大きい場合、位置パラメータは変化しません。 n$# より大きい場合や 0 より小さい場合には、 返却ステータスは 0 より大きい数になります。 それ以外の場合には 0 になります。
shopt [-pqsu ] [-o ] [optname ...]
シェルのオプション動作を制御する変数の値をトグルさせます。 オプションが無い場合や、 -p オプションが指定されている場合には、 設定可能なオプション全てのリストが表示されます。 表示の際には、それぞれが設定されているかどうかも示されます。 -p オプションが指定されていると、 オプションの表示は、入力として再利用できるフォーマットで行われます。 その他のオプションは、以下の意味を持っています:
-s
optname をそれぞれ有効にします (設定します)。
-u
optname をそれぞれ無効にします (設定解除します)。
-q
通常の出力を止めます (静かなモード)。 返却ステータスは optname が設定されているかどうかを示します。 複数の optname 引き数と -q が指定されている場合には、 全ての optnames が有効である時に返却ステータスが 0 となります。 それ以外の時には、0 でない値となります。
-o
optname の値を、組み込みコマンド set-o オプションで定義されているものに制限します。

引き数 optname 無しで -s オプションまたは -u オプションを使った場合、表示されるものは設定されているもの、 または設定されていないものにそれぞれ制限されます。 特に断らない限り、shopt オプションは デフォルトで無効 (設定解除) になっています。

オプションをリスト表示した時の返却ステータスは、 全ての optnames が有効になっている場合は 0 となります。 それ以外の場合には 0 でない値となります。 設定または設定取り消しのオプションの時には、 optname が不正なシェルオプションでなければ、 返却ステータスは 0 となります。

shopt オプションのリストを以下に示します:

cdable_vars
設定されている場合、組み込みコマンド cd への引き数でディレクトリでないものは変数の名前と見なされ、 その値が変更先のディレクトリとなります。
cdspell
設定されている場合、 cd コマンドのディレクトリ要素におけるスペルのちょっとした誤りは修正されます。 チェックされる誤りは、文字の入れ替わり・文字の欠け・ 1 文字余分にあることです。 訂正できた場合には、訂正後のファイル名が表示され、 コマンドは続けて実行されます。 このオプションが使われるのは対話的シェルだけです。
checkhash
設定されている場合、 bash はハッシュ表で見つけたコマンドを実行する前に 実際に存在するかどうかをチェックします。 ハッシュされているコマンドが既に無くなっている場合、 通常のパス検索が行われます。
checkwinsize
設定されている場合、bash はコマンドの実行後に毎回ウィンドウの大きさをチェックし、 必要に応じて LINES COLUMNS の値を更新します。
cmdhist
設定されている場合、 bash は複数行に分かれているコマンドの全ての行を、 同じ履歴エントリに保存しようとします。 これを使うと、複数行に分かれているコマンドの再編集が容易になります。
dotglob
設定されている場合、 bash は `.' で始まるファイル名をパス名展開の結果に含めます。
execfail
設定されている場合、 組み込みコマンド exec への引き数として指定されたファイルが実行できなくても、 対話的でないシェルが終了しません。 対話的シェルは exec に失敗しても終了しません。
expand_aliases
設定されている場合、エイリアスが前述の エイリアス セクションで説明したように展開されます。 このオプションは、対話的なシェルではデフォルトで有効です。
extglob
設定されている場合、拡張されたパターンマッチング機能が有効になります。 これについては、前述のパス名展開 で説明しています。
histappend
設定されている場合、シェルの終了時に履歴リストが変数 HISTFILE の値で指定しているファイルに追加されます。 ファイルへの上書きは行われなくなります。
histreedit
この変数が設定されており、かつ readline が使われている場合、ユーザは失敗した履歴置換を再編集できます。
histverify
この変数が設定されており、かつ readline が使われている場合、履歴置換の結果は即座にはシェルのパーザに渡されません。 その代わり、結果として得られた行は readline の編集バッファに読み込まれ、さらに修正できます。
hostcomplete
この変数が設定されており、かつ readline が使われている場合、bash@ を含む単語を補完する時にホスト名補完を実行しようとします (前述の READLINE ライブラリ のセクションにおける 補完 を参照)。 これはデフォルトで有効になっています。
huponexit
設定されている場合、bash は対話的なログインシェルを終了する時に、 全てのジョブに SIGHUP を送ります。
interactive_comments
設定されている場合、 # で始まる単語について、その単語とその行の残りの文字を 対話的シェルに無視させることができます (前述の コメント セクションを参照)。 このオプションはデフォルトで有効になっています。
lithist
設定されており、かつ cmdhist オプションが有効ならば、 複数行に分かれているコマンドは (セミコロンで区切られるのではなく) できる限り途中に改行を埋め込むことで履歴に保存されます。
mailwarn
設定されており、かつ bash がメールをチェックするファイルが 前回のチェック以降にアクセスされている場合、 メッセージ ``The mail in mailfile has been read'' が表示されます。
no_empty_cmd_completion
設定されており、かつ readline が使われている場合、 空行に対してコマンド補完をさせようとしたときに、 bash は補完用の PATH 検索を行いません。
nocaseglob
設定されている場合、 bash はパス名展開 (前述の パス名展開 を参照) を行う時に、 ファイル名の大文字と小文字を区別せずにマッチングを行います。
nullglob
設定されている場合、 bash はどのファイルにもマッチしないパターン (前述の パス名展開 を参照) を、その文字列自身ではなく、空文字列に展開します。
progcomp
設定されている場合、プログラム補完機能 (前述のプログラム補完 を参照) が有効になります。 このオプションはデフォルトで有効になっています。
promptvars
設定されている場合、 プロンプト文字列に対して変数展開とパラメータ展開が行われます。 この展開は前述の プロンプト セクションで説明した展開が行われた後に行われます。 このオプションはデフォルトで有効になっています。
restricted_shell
シェルが制限モードで起動された場合、 このオプションが設定されます (後述の 制限付きのシェル セクションを参照)。 この値を変更することはできません。 これは起動ファイルが実行される時にもリセットされないので、 シェルが制限付きかどうかを起動ファイル内部で知ることができます。
shift_verbose
設定されている場合、組み込みコマンド shift においてシフトの回数が位置パラメータの数を超えると、 エラーメッセージが出力されます。
sourcepath
設定されている場合、組み込みコマンド source (. ) は PATH の値を使って、引き数として与えられたファイルを含むディレクトリを見つけます。 このオプションはデフォルトで有効です。
xpg_echo
設定されている場合、 組み込みコマンド echo は デフォルトでバックスラッシュによるエスケープシーケンスを展開します。
suspend [-f ]
SIGCONT シグナルを受け取るまで、シェルの実行をサスペンドします。 -f オプションを与えた場合、シェルがログインシェルであっても警告を出しません。 ただし、どちらにせよサスペンドはします。 シェルがログインシェルかつ -f が与えられていない場合と、ジョブ制御が有効でない場合とを除いて、 返却ステータスは 0 です。
test expr
[ expr ]
条件式 expr を評価した結果に基づいて、ステータス 0 または 1 を返します。 演算子とオペランドそれぞれは別々の引き数でなければなりません。 式は前述の 条件式 セクションで説明したプライマリで構成されます。
式は次に示す演算子を使って結合できます。 優先度の高い順に示します。
! expr
expr が偽ならば真になります。
( expr )
expr の値を返します。 これを使うと、通常の演算子の優先度を変更できます。
expr1 -a expr2
expr1expr2 が両方とも真ならば真になります。
expr1 -o expr2
expr1expr2 のいずれかが真ならば真になります。

test および [ は、 引き数の数に基づいた規則の集合を用いて条件式を評価します。

引き数が 0 個
この式は偽です。
引き数が 1 個
引き数が空でない場合に限り真になります。
引き数が 2 個
最初の引き数が ! ならば、 2 番目の引き数が空の場合に限り真になります。 最初の引き数が、既に 条件式 セクションで説明した単項条件演算子のいずれかであれば、 単項の評価が真の場合に式は真となります。 最初の引き数が正しい単項条件演算子でなければ、式は偽となります。
引き数が 3 個
2 番目の引き数が、既に 条件式 セクションで説明した二値条件演算子のいずれかであれば、 最初と 3 番目の引き数をオペランドとして使った 二値評価の結果が式の結果となります。 最初の引き数が ! であれば、2 番目と 3 番目の引き数を使った、 引き数 2 つの評価の結果を否定したものが値となります。 最初の引き数が ( であり、3 番目の引き数が ) ならば、 2 番目の引き数を使って引き数 1 つの評価を行った値が結果となります。 これら以外の場合には、式は偽となります。 この場合においては、-a-o は二値演算子として扱われます。
引き数が 4 個
最初の引き数が ! ならば、 残りの引き数で作った引き数 3 つの式の値を否定したものが結果となります。 それ以外の場合には、先に挙げた規則を使った優先度に従って 式が展開・評価されます。
引き数が 5 個以上
先に挙げた規則を使った優先度に従って式が展開・評価されます。
times
シェルとシェルから実行したプロセスについて、 ユーザ時間とシステム時間を加えたものを出力します。 返却ステータスは 0 です。
trap [-lp ] [arg ] [sigspec ...]
シェルがシグナル sigspec を受け取ると、コマンド arg が読み込まれて、実行されます。 arg が存在しないか、 - である場合、 指定されているシグナルは全て最初の値 (シェルの起動時に設定されていた値) にリセットされます。 arg が空文字列である場合、それぞれの sigspec で指定されているシグナルは、 シェルとシェルが起動したコマンドから無視されます。 arg なしで -p オプションが与えられた場合、 各 sigspec に対応する trap コマンドが表示されます。 引き数が全く無いか、 -p だけが与えられた場合、 trap は各シグナル番号に対応するコマンドのリストを出力します。 それぞれの sigspec は、<signal.h > で定義されているシグナル名またはシグナル番号です。 sigspec EXIT (0) であれば、シェルの終了時にコマンド arg が実行されます。 sigspec DEBUG であれば、単純なコマンド (前述の シェルの文法 セクションを参照) が終わるたびにコマンド arg が実行されます。 -l オプションを与えると、 シェルはシグナル名とこれに対応する番号のリストを出力します。 シェルのエントリで無視されるシグナルは、 トラップもリセットもできません。 トラップされたシグナルはリセットされ、 子プロセスが生成された時の最初の値に戻ります。 sigspec のいずれかが不正であれば、返却ステータスは偽になります。 それ以外の場合には、 trap は真を返します。
type [-atp ] name [name ...]
オプション無しの場合には、各 name をコマンド名として使ったときに、それがどのように解釈されるかを示します。 -t オプションを使うと、 name が、エイリアス・シェルの予約語・関数・ 組み込みコマンド・ディスク上のファイルのいずれかの場合、 type はそれぞれに応じて alias , keyword , function , builtin , file という文字列を出力します。 name が見つからない場合は何も出力されず、偽の終了ステータスが返されます。 -p オプションを使うと、 typename をコマンド名として指定した場合に実行されるディスクファイルの名前、 または空文字列を返します。 空文字列が返されるのは、 type -t nameが file を返さない場合です。 コマンドがハッシュされている場合、 -p はハッシュされている値を表示します。 表示されるのは、必ずしも PATH 中で最初に現われるファイルとは限りません。 -a オプションを使うと、 typename が示す実行ファイルがある場所を全て出力します。 -p オプションが同時に使われていない場合に限り、 エイリアスや関数も出力されます。 -a を使う時には、ハッシュされているコマンドの表は参照されません。 type は、引き数のいずれかが見つかれば真を返し、 どれも見つからなければ偽を返します。
ulimit [-SHacdflmnpstuv [limit ]]
これを使うと、シェルおよびシェルが起動するプロセスが 利用できるリソースを制御できます。 ただし、このような制御ができるシステムの場合に限ります。 limit の値はリソースに対して指定されている単位の数、または unlimited です。 -H オプションと -S オプションは、 それぞれ与えられたリソースに対する 強い (hard) 制限と弱い (soft) 制限を設定します。 強い制限は一度設定すると増やせません。 弱い制限は強い制限の値までは増やせます。 -H-S がどちらも指定されていない場合、 強い制限と弱い制限がどちらも設定されます。 limit を省略すると、リソースの弱い制限の現在値が表示されます。 ただし、-H が与えられている場合は除きます。 複数のリソースが指定されている時は、制限名と単位が値の前に出力されます。 他のオプションは以下のように解釈されます:
-a
現在の制限を全て報告する
-c
生成されるコアファイル (core) の最大サイズ
-d
プロセスのデータセグメントの最大サイズ
-f
シェルが生成できるファイルの最大サイズ
-l
メモリにロックできる最大サイズ
-m
常駐セットサイズの最大値
-n
オープンできるファイル・ディスクリプターの最大数 (ほとんどのシステムでは、この値を設定することはできません)
-p
512 バイトブロック単位でのパイプのサイズ (これは設定できないかもしれません)
-s
最大スタックサイズ
-t
CPU 時間の最大量 (秒単位)
-u
1 人のユーザが使用できる最大のプロセス数
-v
シェルが使用できる最大の仮想メモリ量

limit が与えられている場合、これは指定されたリソースの新しい値となります ( -a は表示専用です)。 オプションが全く与えられなかった場合は、 -f が指定されたものと見なされます。 値は 1024 バイト単位で増えますが、例外として -t は秒単位、 -p 512 バイトブロック単位、 -n および -u は単位無しの値です。 返却ステータスは基本的に 0 ですが、 不正なオプションがある場合、 unlimited 以外の数字でない引き数が limit に指定された場合、 新しい制限を設定する際にエラーが起きた場合は除きます。

umask [-p ] [-S ] [mode ]
ユーザのファイル生成マスクに mode を設定します。 mode が数字で始まる場合には、これは 10 進数と解釈されます。 それ以外の場合には、 chmod (1)に指定するのと同様のシンボリックなモードマスクと解釈されます。 mode が省略されると、現在のマスクの値が出力されます。 -S オプションを指定すると、マスクはシンボリックな形式で表示されます。 デフルトの出力は 10 進の数値です。 -p オプションが指定され、かつ mode が省略された場合、入力として再利用できる形式で出力が行われます。 モードが正常に変更できた場合や、 mode 引き数が全く与えられなかった場合には、 返却ステータスは 0 となります。 それ以外の場合には偽となります。
unalias [-a ] [name ...]
name を定義されているエイリアスのリストから削除します。 -a が与えられている場合には、エイリアス定義は全て削除されます。 与えられた name が定義されているエイリアスであれば、返却ステータスは真になります。
unset [-fv ] [name ...]
name それぞれについて、対応する変数や関数を削除します。 オプションが全く与えられていない場合や、 -v オプションが与えられた場合は、各 name はシェル変数を参照します。 読み込み専用の変数の設定を消すことはできません。 -f が指定されている場合、各 name はシェル関数を参照し、その関数の定義が削除されます。 設定が消された変数や関数は全て、 それ以降のコマンドに渡される環境変数からも削除されます。 RANDOM , SECONDS , LINENO , HISTCMD , FUNCNAME , GROUPS , DIRSTACK のいずれかの設定を消した場合、これらの特殊な特性も無くなります。 これは後で再設定しても元に戻ることはありません。 name が存在しないか、読み込み専用の場合以外には、 終了ステータスは真となります。
wait [n ]
指定されたプロセスを wait し、その終了ステータスを返します。 n はプロセス ID またはジョブ指定です。 ジョブ指定を与えた場合、そのジョブのパイプラインに含まれる 全てのプロセスを wait します。 n が与えられていない場合には、現在アクティブな全ての子プロセスを wait し、 返却ステータスは 0 となります。 n が存在しないプロセスやジョブを指定している場合、 返却ステータスは 127 になります。 それ以外の場合、返却ステータスは wait していた最後のプロセスまたはジョブの終了ステータスとなります。

制限付きのシェル(RESTRICTED SHELL)

bashrbash という名前で起動した場合や、起動時に -r オプションを指定した場合には、シェルは制限された状態になります。 制限付きのシェルは、 標準のシェルよりも細かく制御された環境を設定したいときに用います。 制限付きのシェルは bash と全く同じように動作しますが、 以下のようなことが許可されなかったり実行されなかったりします:
cd を使ってディレクトリを変更すること
SHELL , PATH , ENV , BASH_ENV の値の設定や設定取り消しを行なうこと
/ を含むコマンド名を指定すること
組み込みコマンド . の引き数として / を含むファイル名を指定すること
組み込みコマンド hash に対するオプション -p の引数として / を含むファイル名を指定すること
起動時にシェル環境から関数定義をインポートすること
起動時にシェル環境から SHELLOPTS の値を展開すること
リダイレクション演算子 >, >|, <>, >&, &>, >> を使ってリダイレクトを行 なうこと
組み込みコマンド exec を用いて、シェルを別のコマンドに置き換えること
組み込みコマンド enable に対する -f オプションと -d オプションを使って、組み込みコマンドを追加・削除すること
組み込みコマンド command-p オプションを指定すること
set +rset +o restricted を用いて制限モードを解除すること

これらの制限は、何らかの起動ファイルを読み込んだ後に適用されます。

シェルスクリプトであると判明したファイルが実行された時 (前述の コマンドの実行 を参照) には、 rbash はスクリプト実行用に立ち上げたシェルでは制限を全て無効にします。

関連項目

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
sh (1), ksh (1), csh (1)
emacs (1), vi (1)
readline (3)

ファイル

bash の実行ファイル。
システム全体用の初期化ファイル。ログインシェルが実行します。
個人用の初期化ファイル。ログインシェルが実行します。
対話シェルごとに実行される、個人用の起動ファイル。
個人用のログインシェル後処理ファイル。 ログインシェルの終了時に実行されます。
個人用の readline 初期化ファイル。

著者

Brian Fox, Free Software Foundation
bfox@gnu.org

Chet Ramey, Case Western Reserve University
chet@ins.CWRU.Edu

バグ報告

bash のバグを見つけたら必ず報告してください。 ただし報告の前には、それが本当にバグであることと、 バグが最新版の bash で起こることを確かめてください。

本当にバグがあると判断した場合には、 bashbug コマンドを使ってバグ報告を行います。 バグを修正してくださった場合には、 ぜひその内容も一緒にメールしてください! 提案や「哲学上の」バグ報告は、bug-bash@gnu.org にメールしたり、 ニュースグループの gnu.bash.bug に投稿してくださっても構いません。

バグ報告には必ず以下のことを書いてください:

bash のバージョン
ハードウェアとオペレーティングシステム
コンパイルに使ったコンパイラ
バグ動作の説明
バグを再現できる簡単なシェルスクリプトまたは「レシピ」

bashbug コマンドは、バグ報告を送るために用意されているテンプレートに、 最初の 3 項目を自動的に書き込みます。

このオンラインマニュアルに関するコメントやバグ報告は chet@ins.CWRU.Edu 宛にお願いします。

バグ

bash は大きすぎるし、遅すぎます。

bash と昔ながらのバージョンの sh にはちょっとした違いがいくつかあります。この大部分は POSIX の仕様のせいで生じたものです。

使い方によっては、エイリアスは混乱の元になります。

シェル組み込みコマンドとシェル関数は停止・再実行できません。

複合コマンドや `a ; b ; c' の形式のコマンド列は、 プロセスのサスペンドを行う際に綺麗に扱うことができません。 プロセスを停止すると、 シェルはコマンド列の次のコマンドを即座に実行するからです。 この問題はコマンド列を括弧の中に置いて サブシェルに実行させることで解決できます。 こうすれば、ひとまとまりのものとして停止できます。

$( ...) を使ったコマンド置換の内部にあるコマンドは、 置換が実行される時まで展開されません。 これにより、コマンドを入力してしばらく経つまでエラー出力が遅れます。

配列変数は (まだ) エクスポートできません。