GNU Bourne-Again SHell
-c string
string
から読み込まれます。
string
の後に引き数があれば、これらは
位置パラメータ (positional parameter:
$0
からはじまるパラメータ) に代入されます。
-r
制限された状態 (restricted)
となります (後述の
制限付きのシェル
を参照)。
-i
対話的 (interactive)
に動作します。
-s
-D
--
--dump-po-strings
--dump-strings
--help
--rcfile file
~/.bashrc
の代わりに
file
からコマンドを実行します (後述の
起動
セクションを参照)。
--login
--noediting
--noprofile
~/.profile
のいずれも読み込みません。デフォルトでは、
bash
はログインシェルとして起動された時に
これらのファイルを読み込みます (後述の
起動
セクションを参照)。
--norc
~/.bashrc
の読み込み・実行を行いません。シェルが
sh
として起動された場合には、このオプションはデフォルトで有効になります。
--posix
--restricted
--verbose
--version
/etc/profile
と
~/.profile
の順でコマンドの読み込みと実行をしようとします。
--noprofile
オプションを使うと、この動作を行わないようにできます。
sh
という名前の対話的シェルとして起動されると、
bash
は環境変数
ENV
を調べ、この変数が定義されていればその値を展開し、
展開で得た値をコマンドの読み込みと実行を行うためのファイル名として使います。
sh
という名前で起動されたシェルは、
他の起動ファイルからコマンドの読み込みと起動を行うことはないので、
--rcfile
オプションは全く効果を持ちません。
sh
という名前の非対話的シェルとして起動されると、
このシェルは他の起動ファイルを何も読み込みません。
sh
として起動された場合、
bash
は起動ファイルの読み込みを行った後に
POSIX
モードに入ります。
--posix
コマンドラインオプション等により
bash
が
POSIX
モードで起動されると、
bash
は起動ファイルに関して POSIX 標準に従います。
このモードでは、対話的シェルは
ENV
環境変数を展開し、
展開して得られた名前のファイルからコマンドの読み込みと実行を行います。
他の起動ファイルは全く読み込みません。
bash
は、自分を起動したのがリモートシェルデーモン (通常は rshd)
かどうかを調べます。
rshd によって実行されていると
bash
が判断した場合、
~/.bashrc が存在し、かつ読み込み可能であれば、
bash
はコマンドをこのファイルから読み込んで実行します。
sh として呼び出された場合には、この動作は行いません。
--norc
オプションを使えばこの動作を禁止できますし、
--rcfile
オプションを使えば他のファイルを読ませるようにもできます。
しかし一般的には rshd は
これらのオプションを付けてシェルを起動しませんし、
指定もできないようになっています。
シェルが実ユーザ (グループ) ID と異なる実効ユーザ (グループ) ID で起動され、
かつ -p オプションが与えられていない場合は、
起動ファイルは全く読み込まれず、シェル関数は環境から継承されず、
SHELLOPTS が環境変数に含まれていても無視され、
実効ユーザ ID には実ユーザ ID が設定されます。
-p オプションが起動時に与えられた場合、
起動時の動作は同じですが、
実効ユーザ ID は再設定されません。
ブランク (blank)
単語 (word)
名前 (name)
メタ文字 (metacharacter)
制御演算子
command
の標準出力は
command2
の標準入力に接続されます。
この接続は、
コマンドで指定したどのリダイレクションよりも先に実行されます
(後述の
リダイレクション
を参照)。
パイプラインの前に、予約語である
!
がある場合、
そのパイプラインの終了ステータスは最後のコマンドの終了ステータスの論理値の
NOT を取ったものになります。
それ以外の場合には、
パイプラインのステータスは最後のコマンドの終了ステータスになります。
値を返す前に、シェルはパイプライン中の全てのコマンドが終了するのを待ちます。
パイプラインの前に予約語
time
がある場合、コマンドの実行にかかった
経過時間・ユーザ時間・システム時間がパイプラインの終了時に報告されます。
-p オプションを指定すると、
出力フォーマットが POSIX 仕様に変わります。
変数
TIMEFORMAT
には、経過時間情報の表示の仕方を指定するフォーマット文字列を
設定できます (後述の
シェル変数
の項の
TIMEFORMAT
に関する説明を参照)。
パイプライン中の各コマンドは、それぞれ別のプロセスとして
(つまりサブシェル内で) 実行されます。
command1
が終了ステータス 0 を返した場合に限り
command2
が実行されます。
OR リストは
command1 bvbv command2
という形式であり、
command1
が 0 以外の終了ステータスを返した場合に限り
command2
が実行されます。AND リストと OR リストの返却ステータスは、
リスト中で最後に実行されたコマンドの終了ステータスです。
(list)
{ list; }
((expression))
[[ expression ]]
( expression )
! expression
expression
が偽ならば真になります。
expression1 && expression2
expression1
と
expression2
が両方とも真であれば真になります。
expression1
と
expression2
のどちらかが真であれば真となります。
expression1 の値だけで条件式全体の返り値が決定できれば、
&& 演算子と
||
演算子は expression2 を実行しません。
for name [ in word ] ; do list ; done
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
select name [ in word ] ; do list ; done
name
の値としてその単語が設定されます。
行が空であれば、単語とプロンプトが再び表示されます。
EOF を読み込むとコマンドが終了します。
これ以外の値の場合には、
name
には空文字列が設定されます。読み込んだ行は変数
REPLY
に格納されます。
break
または
return
コマンドが実行されるまで、選択を行うたびに
list
が実行されます。
select
の終了ステータスは、
list
中で最後に実行したコマンドの終了ステータスですが、
コマンドが全く実行されなかった場合には 0 となります。
case word in [ [(] pattern [ | pattern ] \
if list; then list; \
list
が実行されます。この終了ステータスが 0 ならば、then list
が実行されます。
そうでなければ elif list がそれぞれ順番に実行され、
この終了ステータスが 0 ならば、対応する then list
が実行され、コマンドが終了します。そうでなければ、else list
が (もし存在すれば) 実行されます。
終了ステータスは最後に実行されたコマンドの終了ステータスですが、
真と評価された条件が全く無い場合には 0 となります。
until list; do list; done
list
は、
list
中の最後のコマンドが
0 以外の終了ステータスを返す限りずっと実行されます。
while コマンドと until コマンドの終了ステータスは、
do list で実行された最後のコマンドの終了ステータスになりますが、
コマンドが全く実行されなかった場合には 0 になります。
[ function ] name () { list; }
リスト
です。単純なコマンドの名前として name が指定されると、
必ずこのリストが実行されます。
関数の終了ステータスは、
関数本体で最後に実行されたコマンドの終了ステータスです (後述の
関数
を参照)。
\a
\b
\e
\f
\n
\r
\t
\v
\\
\'
\nnn
\xnnn
パラメータ (parameter)
は値を保持するためのものです。パラメータは
名前 、
数字、後述の
特殊なパラメータ
で挙げる特殊文字のいずれかで表現されます。シェルでの用法においては、
変数(variable)
とは
名前
で表現されたパラメータです。
パラメータに値が代入されていれば、
そのパラメータは設定 (set) されていると言われます。
空文字列も有効な値です。一度値を設定すると、組み込みコマンドの
unset
を使わなければ設定を取り消す (unset する) ことはできません
(後述の
シェルの組み込みコマンド
を参照)。
変数
には、以下の構文で代入できます:
name=[value]
value
が与えられなかった場合、変数には空文字列が代入されます。全ての
value
に対して、チルダ展開、パラメータと変数の展開、コマンド置換、
算術式展開、クォート除去が行われます (後述の
展開
を参照)。変数の
整数
属性が設定されている場合 (後述の
シェルの組み込みコマンド
を参照)、$((...)) の展開を使っていなくても
value
に対しての算術展開が行われます (後述の
算術式展開
を参照)。
特殊パラメータ
で後述する $@ という例外を除いて、単語の分割は行われません。
パス名展開も実行されません。
位置パラメータ (positional parameter)
は、1 桁以上の数値で表されるパラメータです。ただし 0 は含みません。
位置パラメータは、シェルが起動されたときにシェルの引き数が代入されますが、
組み込みコマンドの
set
を使って代入し直すこともできます。
代入文を使って位置パラメータへの代入を行うことはできません。
シェル関数が実行されると、
位置パラメータは一時的に置き換えられます (後述の
関数
を参照)。
2 桁以上の数値を含む位置パラメータを展開するときには、ブレース ({})
で囲まなければなりません (後述の
展開
を参照)。
*
c
は変数
IFS
の値の最初の文字です。
IFS
が設定されていなければ、パラメータは空白で区切られます。
IFS
が空文字列の場合、パラメータの間には区切り文字は入らず、
全てのパラメータは繋げられます。
@
#
?
-
$
!
0
_
PPID
PWD
OLDPWD
REPLY
UID
EUID
GROUPS
BASH
BASH_VERSION
BASH_VERSINFO
BASH_VERSINFO[0]
BASH_VERSINFO[1]
BASH_VERSINFO[2]
BASH_VERSINFO[3]
BASH_VERSINFO[4]
BASH_VERSINFO[5]
SHLVL
RANDOM
SECONDS
LINENO
HISTCMD
FUNCNAME
DIRSTACK
PIPESTATUS
OPTARG
OPTIND
HOSTNAME
HOSTTYPE
OSTYPE
MACHTYPE
SHELLOPTS
on
であると報告されます。
この変数が
bash
の起動時に環境変数に入っていた場合、
どの起動ファイルを読むよりも前にリスト中のシェルオプションが有効になります。
この変数は読み込み専用です。
COMP_WORDS
COMP_CWORD
COMP_LINE
COMP_POINT
IFS
内部フィールド区切り文字 (Internal Field Separator)
です。展開を行った後に単語を分割する場合や、組み込みコマンドの
read
を使った時に行を単語に分割する場合に使われます。
デフォルト値は ``<空白><タブ><改行>'' です。
PATH
HOME
CDPATH
BASH_ENV
MAIL
MAILCHECK
MAILPATH
PS1
PS2
PS3
PS4
TIMEFORMAT
%%
%[p][l]R
%[p][l]U
%[p][l]S
%P
HISTSIZE
HISTFILE
HISTFILESIZE
OPTERR
LANG
LC_ALL
LC_COLLATE
LC_CTYPE
LC_MESSAGES
LC_NUMERIC
LINES
COLUMNS
IGNOREEOF
TMOUT
FCEDIT
FIGNORE
GLOBIGNORE
INPUTRC
HISTCONTROL
ignoreboth
の値はこれらの 2 つのオプションを同時に実現します。
設定されていないか上記のいずれの値でもない場合には、
パーザが読み込んだ全ての行は
HISTIGNORE
の値が示す条件の下で履歴リストに保存されます。
この変数は既に古くなっており、この機能は
HISTIGNORE
変数で用いることになっています。
複数行にまたがる複雑なコマンドの場合は
2 番目以降の行が調べられることはありません。よって、これらは
HISTCONTROL
の値に関わらず履歴に追加されます。
HISTIGNORE
histchars
HOSTFILE
auto_resume
名前
とは、コマンドを起動する際に使ったコマンドラインのことです。
この値に
exact
が設定されている場合、
与えられた文字列は停止しているジョブの名前に
正確にマッチしなければなりません。
substring
が設定されている場合は、
与えられた文字列は停止しているジョブの名前の部分文字列に
マッチする必要があります。
substring
という値は、ジョブ識別子の
%?
に似た機能を持っています (後述の
ジョブ制御
を参照)。これ以外の値が設定されている場合、
与えられた文字列は停止しているジョブの名前の
プレフィックスでなければなりません。これはジョブ識別子の
%
と似た機能を持っています。
COMPREPLY
subscript
は算術式として扱われますが、この式は評価すると
0 以上の数値になるものでなければなりません。
明示的に配列を宣言するには、
declare -a name
を使います (後述の
シェルの組み込みコマンド
を参照)。
declare -a name[subscript]
も許されます。subscript は無視されます。
組み込みコマンドの
declare
と
readonly
を使うと、配列変数に対して属性を設定できます。
どちらの属性も配列のメンバ全てに対して適用されます。
配列の代入は
という形式の複合代入 (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
オプションを使えば標準入力から読み込んだ単語のリストを
配列に代入できます。組み込みコマンド
set
と
declare
では、別の変数への代入に再利用できるような形で配列の値を表示します。
ブレース展開 (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
はブレース展開の結果として単語からブレースを取り除きます。例えば
sh
に file{1,2} のように入力された単語はそのままの形で出力されますが、
bash
ではこの同じ単語は展開されて
file1 file2
のように出力されます。
厳密に
sh
と互換にしたければ、
bash
を
+B
オプションを付けて起動するか、
set
コマンドに
+B
オプションを与えてブレース展開を無効にしてください
(後述する
シェル組み込みコマンド
を参照)。
${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:length}
${!prefix*}
${#parameter}
parameter
が
*
または
@
ならば、位置パラメータの数に置換されます。
parameter
が
*
または
@
が添字になっている配列名ならば、配列中の要素数に置換されます。
${parameter##word}
word
が展開され、パス名展開の場合と同じようなパターンを作ります。
このパターンが
parameter
の値の先頭部分とマッチする場合、展開して得られる値は
parameter
を展開した値から最短一致パターン (``#''の場合)
または最長一致パターン (``##'' の場合)
を取り除いたものになります。
parameter
が
@
または
*
である場合、
パターンを削除する操作は全ての位置パラメータに順番に適用され、
展開結果はリストとして得られます。
parameter
が
@
または
*
が添字になっている配列変数である場合、
パターンを削除する操作は配列の全ての要素に順番に適用され、
展開結果はリストとして得られます。
${parameter%%word}
word
が展開され、パス名展開の場合と同じようなパターンを作ります。
このパターンが
parameter
を展開した値の末尾の部分とマッチする場合、展開結果は
parameter
を展開した値から最短一致パターン (``%'' の場合)
または最長一致パターン (``%%'' の場合)
を取り除いたものになります。
parameter
が
@
または
*
である場合、
パターンを削除する操作は全ての位置パラメータに順番に適用され、
展開結果はリストとして得られます。
parameter
が
@
または
*
が添字になっている配列変数である場合、
パターンを削除する操作は配列の全ての要素に順番に適用され、
展開結果はリストとして得られます。
${parameter//pattern/string}
parameter
が
@
または
*
である場合、置換操作は全ての位置パラメータに順番に適用され、
展開結果はリストとして得られます。
parameter
が
@
または
*
が添字になっている配列変数である場合、
置換操作は配列の全ての要素に順番に適用され、
展開結果はリストとして得られます。
expression
はダブルクォート内部にある場合と同様に扱われますが、
括弧の内側のダブルクォートが特別扱いされることはありません。
式に含まれる全てのトークンに対して、
パラメータ展開・文字列展開・コマンド置換・クォートの削除が行われます。
算術式置換は入れ子にできます。
評価は後述の
算術式評価
で示す規則に基づいて行われます。
expression
が不正であれば、
bash
は評価の失敗を示すメッセージを出力し、置換を全く行いません。
単語分割
を行います。
シェルは
IFS
のそれぞれの文字を区切り文字として扱い、
他の展開の結果をこれらの文字によって単語に分割します。
IFS
が設定されていないか、その値が正確にデフォルト値の
<スペース><タブ><改行>
ならば、
IFS
文字の任意の列で単語が区切られます。
IFS
がデフォルト以外の値を持っていれば、空白文字
( スペース
および
タブ )
の列は単語の先頭と末尾では無視されます。これは空白文字が
IFS
の値 (
IFS
空白文字) に含まれる限り成り立ちます。
IFS
に含まれ、
IFS
空白文字ではない文字は全て、隣接する任意の
IFS
空白文字と一緒になってフィールドの区切りとなります。
IFS
空白文字の列も区切り文字として扱われます。
IFS
の値が空文字列であれば、単語分割は全く行われません。
明示的に指定した空の引き数(\f3
または \f3'')は削除されずに残ります。
クォートされていない暗黙的な空の引き数が、
値を持たないパラメータを展開した結果として得られますが、
これらは削除されます。
値を持たないパラメータがダブルクォート内部で展開されると、
これは空である引き数となり、消されずに残ります。
展開が行われなければ単語分割も行われない点に注意してください。
パターン
と見なされ、
パターンにマッチするファイル名を
アルファベット順にソートしたリストに置換されます。
マッチするファイル名が見つからず、かつシェルのオプション
nullglob
が無効ならば、その単語は変更されずにそのまま残ります。
nullglob
オプションが設定されていて、かつマッチするファイル名が見つからなければ、
その単語は削除されます。
シェルのオプション
nocaseglob
が有効ならば、マッチングにおいてアルファベットの大文字と小文字は区別さ
れません。
パターンをパス名展開に使うとき、名前の先頭やスラッシュの直後の
``.''
は明示的にマッチさせなければなりません。ただしシェルのオプション
dotglob
が設定されている場合は例外です。
パス名のマッチングを行うとき、
スラッシュ文字は必ず明示的にマッチさせなければなりません。
これ以外の場合には、
``.''
が特別扱いされることはありません。
シェルのオプション
nocaseglob ,
nullglob ,
dotglob
の詳しい説明については、後述の
シェルの組み込みコマンド
に書かれている
shopt
の説明を参照してください。
シェル変数
GLOBIGNORE
を使って、
パターン
にマッチするファイル名の集合を制限できます。
GLOBIGNORE
が設定されていれば、マッチするファイル名のうち
GLOBIGNORE
中のパターンにもマッチしたものは、
マッチしたもののリストから取り除かれます。
ファイル名
``.''
と
``..''
は必ず無視されます。これは
GLOBIGNORE
が設定されていても同じです。しかし、
GLOBIGNORE
を設定するとシェルオプションの
dotglob
が有効になるので、
``.''
で始まる他のファイル名は全てマッチします。
``.''
で始めるファイル名を無視する古い動作をさせるには、
``.*''
を
GLOBIGNORE
のパターンに含めてください。
GLOBIGNORE
が設定されていなければ、
dotglob
オプションは無効になります。
パターンマッチング
パターンに含まれる文字のうち、後述する特殊パターン文字以外の文字は、
自分自身にマッチします。NUL 文字がパターン中に現われてはいけません。
特殊パターン文字をその文字そのものにマッチさせるためには、
クォートしなければなりません。
特殊パターン文字は以下の意味を持っています:
*
?
[...]
範囲表現 (range expresion)
を表します。ソート順で 2 つの文字の間にある任意の文字と、
両端の 2 文字がマッチします。
ソートには現在のロケールの照合順序 (collating sequance)
と文字セットが用いられます。
[
の次の文字が
!
または
^
ならば、括られた文字に含まれない任意の文字がマッチします。
範囲表現における文字のソート順は、
現在のロケール (およびシェル変数
LC_COLLATE
が指定されていればその値)
によって決定されます。
-
は、文字集合の最初または最後の文字として含めると
マッチングの対象にできます。
]
は、文字集合の最初の文字として含めるとマッチングの対象にできます。
.sp 1
[
と
]
の間では、文字クラス (character classes) を指定できます。
指定には [:class:] という記法を使います。ここで
class は POSIX.2 標準で定義されている以下のクラスのいずれかです:
alnum alpha ascii blank cntrl digit graph lower print punct space upper xdigit
文字クラスは、そのクラスの属する任意の文字にマッチします。
.sp 1
[
と
]
の間では、同値クラス (equivalence class) を指定できます。
指定には [=c=] という記法を使います。
これは現在のロケールにおける定義において c と同じ
照合重さ (collation weight) を持つ全ての文字にマッチします。
.sp 1
[
と
]
の間では、[.symbol.] という記述は照合シンボル
symbol にマッチします。
組み込みコマンドの shopt を使ってシェルのオプション
extglob が有効にされていると、
拡張パターンマッチング演算子がいくつか認識されるようになります。
以下の説明では、pattern-list は
| で区切られた 1 つ以上のパターンのリストであるものとします。
以下のサブパターンを 1 つあるいは複数使うことにより、
複合パターンを作れます。
?(pattern-list)
*(pattern-list)
+(pattern-list)
@(pattern-list)
!(pattern-list)
リダイレクト
できます。またリダイレクトを使うと、
現在のシェル実行環境に対してファイルをオープンしたり
クローズしたりできます。以下に示すリダイレクト演算子は、
単純なコマンド
の前や途中に置くことができ、また
コマンド
の後に置けます。
リダイレクトは左から右へと、現われた順に処理されます。
以下の説明においては、ファイル・ディスクリプター番号が省略され、
かつリダイレクト演算子の最初の文字が
<
ならば、リダイレクトは標準入力 (ファイル・ディスクリプター 0) を参照します。
リダイレクト演算子の最初の文字が
>
ならば、リダイレクトは標準出力 (ファイル・ディスクリプター 1) を参照します。
以下の説明では、リダイレクト演算子の次の単語に対しては、
特に説明しない限り、
ブレース展開・チルダ展開・パラメータ展開・コマンド置換・
算術式展開・クォート削除・パス名展開・単語分割が行われます。
ある単語が複数の単語に展開された場合はエラーになります。
リダイレクトの順番には意味がある点に注意してください。
例えば、次のコマンド
ls > dirlist 2>&1
は標準出力と標準エラー出力を両方ともファイル
dirlist
に書き込みますが、次のコマンド
ls 2>&1 > dirlist
では標準出力だけがファイル
dirlist
に書き込まれます。なぜなら後者の場合には、標準エラー出力は
dirlist
にリダイレクトされる前の標準出力の複製となるからです。
bash は、
以下の表にあるようなファイル名がリダイレクトに使用されると、
それらを特別に扱います。
/dev/fd/fd
/dev/stdin
/dev/stdout
/dev/stderr
/dev/tcp/host/port
/dev/udp/host/port
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
word
を展開した結果の名前を持つファイルにリダイレクトできます。
標準出力と標準エラー出力に対する形式は 2 つあります:
&>word
および
>&word
両者のうち望ましいのは前者の方です。これは次のものと同じ意味です:
>word 2>&1
word
を単独で含む行 (末尾にブランク文字があってはいけません)
が現われるまで続きます。
その行までに読み込んだ行は、
コマンドの標準入力として扱われます。
ヒアドキュメントの形式を以下に示します:
<<[-]word here-document delimiter
word
に対するパラメータ展開・コマンド置換・算術式展開・
パス名展開は全く行われません。
word
が一部でもクォートされている場合は、
delimiter
は
word
のクォートをほどいた結果 (クォート文字を削除した結果) となり、
ヒアドキュメントに含まれる行では展開が行われなくなります。
word がクォートされていなければ、
ヒアドキュメント中の全ての行に対して
パラメータ展開・コマンド置換・算術式展開が行われます。
後者の場合には
\<newline>
という文字列は無視されます (出力から取り除かれます)。
また
,
$ ,
`
といった文字は
\
を用いてクォートしなければなりません。
リダイレクト演算子が
<<-
ならば、行頭にあるタブ文字は全て入力行および
delimiter
を含む行から取り除かれます。
これにより、シェルスクリプト中のヒアドキュメントを
自然な形でインデントさせることができます。
word
が 1 桁以上の数値に展開された場合、
n
で示されるファイル・ディスクリプターが生成され、
そのファイル・ディスクリプターのコピーとなります。
word
に含まれる数値が入力のためにオープンされたファイル・ディスクリプターを
指していない場合、リダイレクト・エラーが起きます。
word
を評価した結果が
-
となった場合、ファイル・ディスクリプター
n
はクローズされます。
n
が指定されていない場合、標準入力
(ファイル・ディスクリプター 0) が使われます。
同様に、演算子
[n]>&word
を使って出力ファイル・ディスクリプターを複製できます。
n
が指定されていない場合は、標準出力
(ファイル・ディスクリプター 1) が使われます。
word
に含まれる数値が、出力のためにオープンされた
ファイル・ディスクリプターを指していない場合、
リダイレクト・エラーが起きます。特別な場合ですが、
n が省略され、かつ word が
1 桁以上の数字には展開されなかった場合、
前に説明したように標準出力と標準エラー出力がリダイレクトされます。
word
を展開した結果の名前を持つファイルがファイル・ディスクリプター
n
での読み書きのためにオープンされます。
n
が指定されていなければ、
ファイル・ディスクリプター 0 で読み書きが行われます。
ファイルが存在しなければ、新しく生成されます。
メタ文字
も含まれますが、
例外としてエイリアス名に = を含めることはできません。
置換されるテキストの最初の単語に対しても
エイリアスかどうかの評価がされますが、
最初の単語が展開されるエイリアスと同じ場合には
展開は 1度しか行われません。つまり
ls
が
ls -F
のエイリアスとなっているような場合には、
bash
は置換される文字列を再帰的に展開することはありません。
エイリアスの値の最後の文字が
ブランク文字
の場合、エイリアスに続く次のコマンドの単語に対しても
エイリアス展開が試みられます。
エイリアスは
alias
コマンドで作成とリスト表示を行い、
unalias
コマンドで削除します。
置換されるテキストに引き数を入れる仕組みはありません。
引き数が必要ならば、シェル関数を使わなければなりません (後述の
関数
を参照)
シェルが対話的でない時には、
shopt
コマンドによって
expand_aliases
オプションが設定されていない場合に限り、
エイリアスの展開は行われません (後述の
シェルの組み込みコマンド
における
shopt
の説明を参照)。
エイリアスの定義や利用に関係する規則には、紛らわしい点があります。
bash
は、ある行に書かれているコマンドを実行する前に必ず、
少なくとも 1 回は行全体を読み込みます。
エイリアスが展開されるのはコマンドを読み込んだ時であり、
実行する時ではありません。
したがって、別のコマンドと同じ行でエイリアス定義を行った場合には、
次の入力行が読み込まれるまではエイリアスの効果は現われません。
同じ行にあるエイリアス定義の後のコマンドは、
新しいエイリアスの影響を受けません。
この動作は関数を実行する場合にも問題になります。
エイリアスが展開されるのは関数定義が読み込まれる時であり、
関数が実行される時ではありません。
なぜなら、関数定義自身も複合コマンドだからです。
その結果として、関数内で定義されたエイリアスは、
その関数が実行されるまでは利用できません。
安全のため、エイリアス定義は独立した行で行うべきです。
複合コマンド内で
alias
を使ってはいけません。
ほとんど全ての用途において、
シェル関数でエイリアスを代用できます。
id++ id--
++id --id
- +
! ~
**
* / %
+ -
<< >>
<= >= < >
== !=
&
^
|
&&
||
expr?expr:expr
= *= /= %= += -= <<= >>= &= ^= |=
expr1 , expr2
-a file
-b file
-c file
-d file
-e file
-f file
-g file
-h file
-k file
-p file
-r file
-s file
-t fd
fd
がオープンされており、かつ端末を参照していれば真となります。
-u file
-w file
-x file
-O file
-G file
-L file
-S file
-N file
file1 -nt file2
file1 -ot file2
file1 -ef file2
-o optname
optname
が有効ならば真となります。後述する組み込みコマンド
set
に対するオプションの説明中にあるオプション一覧を参照してください。
-z string
-n string
string
string
の長さが 0 でなければ真となります。
string1 == string2
string1 != string2
string1 < string2
string1 > string2
arg1 OP arg2
arg1
や
arg2
には、正または負の整数を使用できます。
環境 (environment)
と呼ばれる文字列の配列が渡されます。
これは 変数名-値 のペアからなるリストで、
変数名=値
という形になります。
シェルは、環境を操作する様々な方法を提供しています。
起動時には、シェルは自分自身の環境を調べ、
見つかった名前それぞれに対してパラメータを生成し、
それに自動的に印を付けて子プロセスに
エクスポート (export)
します。実行されたコマンドは環境を継承します。
export
コマンドまたは
declare -x
コマンドを用いると、
パラメータや関数の追加と削除を環境に対して行えます。
環境内のパラメータの値が変更されると、
新しい値は環境の一部となり、古い値と置き換わります。
実行されたコマンドが継承する環境は、
シェルの最初の環境から、
変数の値がシェル中で変更されたり、
一部のペアが
unset
コマンドで削除されたり、
export
コマンドや
declare -x
コマンドで追加されたりしたものになります。
単純なコマンド
や関数に対する環境は、一時的に修正できます。
これは、既に
パラメータ
の項で説明したように、パラメータ代入を前に置くことで行います。
このような代入が影響を与えるのは、
そのコマンドが参照する環境だけです。
-k
オプションを設定 (後述の組み込みコマンド
set
を参照) すると、コマンド名の前に置いたものだけではなく、
全ての
パラメータ代入がそのコマンドの環境に影響を与えます。
bash
が外部コマンドを起動したときには、変数
_
にはコマンドの完全なファイル名が設定され、
環境変数としてそのコマンドに渡されます。
ジョブ制御(job control)
とは、プロセスの実行を選択的に停止 (サスペンド/suspend) させ、
後に再び実行を続けさせる (リジューム/resume) 機能のことです。
ユーザは通常、システムの端末ドライバと
bash
を組み合わせて使い、対話的インタフェースを通してこの機能を利用します。
シェルはパイプラインごとに
ジョブ(job)
を構成します。シェルは現在実行中のジョブのテーブルを保存しています。
このテーブルは
jobs
コマンドを使ってリスト表示できます。
bash
がジョブを非同期的に
( バックグラウンド
で) 起動したときには、
bash
は以下のような行を出力します:
[1] 25647
これは、このジョブのジョブ番号は 1 であり、
このジョブを構成するパイプライン中の最後のプロセスの ID が
25647 であることを示しています。
1 つのパイプラインに含まれる全てのプロセスは同じジョブのメンバです。
bash
は、ジョブ制御の基礎として
ジョブ
という抽象化機構を使います。
ジョブ制御のためのユーザインタフェースの実装を容易にするために
オペレーティングシステムは
現在の端末プロセスのグループ ID (current terminal process group ID)
という情報を管理しています。
このプロセスグループのメンバ
(プロセスグループ ID が現在の端末プロセスのグループ ID と等しいプロセス) は、
SIGINT
のような、キーボードで生成されたシグナルを受け取ります。
このようなプロセスは
フォアグラウンド (foreground)
にあると言われます。
バックグラウンド (background)
プロセスは、
プロセスのグループ ID が端末のグループ ID と異なるプロセスです。
このようなプロセスは、キーボードで生成したシグナルの影響を受けません。
端末への読み書きが許されるのはフォアグラウンドプロセスだけです。
バックグラウンドプロセスが端末からの読み込み
(端末への書き込み) を行おうとすると、
このプロセスには端末ドライバから
SIGTTIN (SIGTTOU)
シグナルが送られます。
このシグナルを捕捉しなければ、プロセスは停止します。
bash
を動かしているオペレーティングシステムがジョブ制御をサポートしているならば、
ユーザは
bash
を使ってジョブ制御を行えます。
プロセスの動作中に
サスペンド
文字(通常は
^Z ,
Control-Z) を打ち込むと、そのプロセスは停止させられ、
bash
に制御が戻ります。
遅延サスペンド (delayed suspend)
文字 (通常は
^Y ,
Control-Y) を打ち込むと、
そのプロセスは端末から入力を読み込もうとしたときに停止させられ、
制御が
bash
に戻ります。
このときユーザはこのジョブの状態を操作できます。
利用できるのは、バックグラウンドで実行を継続するならば
bg
コマンド、フォアグラウンドで実行を継続するならば
fg
コマンド、プロセスを kill するなら
kill
コマンドです。^Z の効果は即座に現われるので、
未出力の出力や先行入力した文字が破棄されるという副作用があります。
シェル上でジョブを参照する方法は色々あります。文字
%
はジョブ名の始まりを示します。ジョブ番号
n
は
%n
として参照できます。
ジョブの参照には、
ジョブを起動する時に使った名前の先頭部分や
コマンドライン中に現われる部分文字列を使うこともできます。
例えば、
%ce
は停止しているジョブ
ce
を指します。先頭の部分がマッチするジョブが複数個ある場合には、
bash
はエラーを報告します。一方、
%?ce
を用いると、文字列
ce
をコマンドライン中に含む任意のジョブを参照できます。
部分文字列がマッチするジョブが複数個ある場合には、
bash
はエラーを報告します。シンボル
%%
および
%+
は、シェルが覚えている
カレントジョブ (current job)
を指します。これは、フォアグラウンドで起動されている時に停止されたか、
バックグラウンドで起動された最後のジョブです。
前のジョブ (previous job)
は
%-
を使って参照できます。jobs コマンドの出力においては、
カレントジョブには必ず
+
というフラグが付き、前のジョブには
-
というフラグが付きます。
単にジョブを呼べば、
そのジョブをフォアグラウンドに持ってきます。つまり、
%1
は
``fg %1''
と同義であり、
ジョブ 1 をバックグラウンドからフォアウグラウンドに持ってきます。
同様に
``%1 &''
はジョブ 1 をバックグラウンドで実行再開させます。これは
``bg %1''
と同じ意味です。
ジョブの状態が変わると、シェルはそれを即座に知ります。
bash
がジョブの状態変化を報告するのは通常、プロンプトを出力する直前です。
これは他の出力を妨害しないためです。組み込みコマンド
set
で
-b
オプションが指定されていると、
bash
はこのような変化を即座に報告します。
ジョブを停止させたままで
bash
を終了 (exit) させようとすると、シェルは警告メッセージを出力します。
このような時には、
jobs
コマンドを使ってジョブの状態を調べられます。
間にコマンドを挟まずに
bash
を再び終了させようとすると、
シェルは警告を繰り返さないで、
停止されているジョブを終了させます。
\a
\d
\e
\h
\H
\j
\l
\n
\r
\s
\t
\T
\@
\u
\v
\V
\w
\W
\!
\#
\$
\nnn
\\
\[
\]
メタ
キーは M-key で表すので、M-x は Meta-X を表すことになります。
( メタ
キーが無いキーボードでは、M-x は ESC x を表します。つまり、
エスケープキーを押した後に
x
キーを押します。これは ESC を
メタプレフィックス (meta prefix) にする操作です。
M-C-x の組み合わせは、ESC-Control-x
あるいはエスケープキーを押した後に、コントロールキーを押したまま
x
を押すことを示します。)
Readline のコマンドには数値の
引き数
を指定できます。通常これは繰り返しの回数として作用します。
ただし場合によっては、引き数の符号が意味を持つこともあります。
前方に作用するコマンド (例: kill-line) に負の引き数を渡すと、
コマンドは後方に作用します。
引き数に対する動作がこの説明と異なるコマンドについては後で説明します。
コマンドがテキストをキル (kill) すると説明されている時は、
削除されたテキストは、
後で取り出せる (ヤンク (yank) できる) ように保存されます。
キルされたテキストは、キルリング (kill ring) に保存されます。
連続してキルを行うと、テキストは 1 つのまとまりとして保存されるので、
全部を一度にヤンクできます。テキストをキルしないコマンドが挟まると、
キルリング上のテキストが分離されます。
~/.inputrc
です。
readline ライブラリを使うプログラムが起動する際には、
この初期化ファイルが読み込まれ、キー割り当てと変数が設定されます。
readline の初期化ファイル中で使用できる基本的構文は、
以下のように少ししかありません。
空行は無視されます。
# で始まる行はコメントです。
$ で始まる行は条件文です。
それ以外の行はキー割り当てと変数の設定です。
デフォルトのキー割り当ては
inputrc
ファイルで変更できます。このライブラリを使う他のプログラムからも、
独自のコマンドとキー割り当てを追加できます。
例えば、
M-Control-u: universal-argument
や
C-Meta-u: universal-argument
を
inputrc
ファイルに書くと、M-C-u で readline の
universal-argument
コマンドが実行されるようになります。
認識されるシンボリックな文字名を以下に示します:
RUBOUT ,
DEL ,
ESC ,
LFD ,
NEWLINE ,
RET ,
RETURN ,
SPC ,
SPACE ,
TAB 。
readline では、コマンド名だけでなくキーにも文字列を割り当てできます。
つまり、そのキーが押されると文字列が挿入されます
(マクロ, macro)。
inputrc
ファイルにおける制御キーの割り当て方は単純です。
必要なものは、コマンドの名前あるいはマクロのテキストと、
これらが割り当てられるキーシーケンスだけです。
名前は 2 通りの方法で指定できます。
つまり、シンボリックなキーの名前
(たぶん、これに Meta- や Control-
プレフィックスが付いたもの) による指定と、
キーシーケンスによる指定です。
「keyname:function-name」あるいは
「keyname:macro」の形式を使うときには、
keyname
は英語で書き下したキーの名前となります。例を以下に示します:
C-u
が
universal-argument
に、
M-DEL
が
backward-kill-word
に割り当てられます。
また、
C-o
はマクロの実行に割り当てられ、右辺値に展開されます (つまり、テキスト
``> output''
が編集行に挿入されます)。
後者の形式である「keyseq:function-name」または
「keyseq:macro」においては、
keyseq
は先程の
keyname
とは異なり、
ダブルクォートで括ってキーシーケンス全体を示す文字列を表記しています。
以下の例で示すように、GNU Emacs 形式のキーエスケープの一部を使えます。
ただしシンボリックな文字名は認識されません。
C-u
が
universal-argument
機能に割り当てられています。
C-x C-r
は
re-read-init-file
機能に割り当てられ、
ESC [ 1 1 ~
は
Function Key 1
``Function Key 1''.
という文字列の挿入に割り当てられています。
GNU Emacs 形式のエスケープシーケンスを以下に全て示します:
\C-
\M-
\e
\\
\
\'
\a
\b
\d
\f
\n
\r
\t
\v
\nnn
\xnnn
inputrc
ファイル中に
set variable-name value
という形式の文で設定できます。
特に断らない限り、readline の変数は
On
または
Off
のいずれかです。
変数とそのデフォルト値を以下に示します:
bell-style (audible)
comment-begin (``#'')
completion-ignore-case (Off)
completion-query-items (100)
convert-meta (On)
disable-completion (Off)
editing-mode (emacs)
enable-keypad (Off)
expand-tilde (Off)
horizontal-scroll-mode (Off)
input-meta (Off)
isearch-terminators (``C-[C-J'')
keymap (emacs)
mark-directories (On)
mark-modified-lines (Off)
output-meta (Off)
print-completions-horizontally (Off)
show-all-if-ambiguous (Off)
visible-stats (Off)
sun
は
sun
と
sun-cmd
の両方にマッチできます。
application
application はアプリケーション固有の設定を入れるために使います。
readline ライブラリを使っているプログラムはそれぞれ
アプリケーション名 (application name) を設定するので、
初期化ファイルはそれが特定の値かどうかを調べられます。
これを使って、キーシーケンスを特定のプログラム用の
便利な機能に割り当てできます。例えば以下のコマンドは、
bash 内で現在または 1 つ前の単語をクォートするキーシーケンスを追加します:
$if Bash # Quote the current or previous word \C-xq: \eb\\ef\ $endif$endif このコマンドは上の例で見たように、$if コマンドを終了させます。 $else $if ディレクティブのこの分岐内におけるコマンドは、 評価が失敗した時に実行されます。 $include このディレクティブはファイル名 1 つを引き数に取り、 そのファイルからコマンドとキー割り当てを読み込みます。 例えば以下のディレクティブを使うと /etc/inputrc が読み込まれます:
$include /etc/inputrc
インクリメンタル (incremental)
モードと
非インクリメンタル (non-incremental)
モードの 2 つがあります。
インクリメンタル検索は、
ユーザが検索文字列の入力を終えるより前に検索を開始します。
検索文字列に文字が追加されるたびに、
readline は現在まで入力した文字列にマッチする履歴から
次のエントリを表示します。インクリメンタル検索で必要なのは、
探している履歴エントリを見つけるために必要な数の文字だけです。
インクリメンタル検索を終了させるには、
isearch-terminators の値に入っている文字を使います。
この変数に値が代入されていない場合には、エスケープ文字または
Control-J でインクリメンタル検索が終了します。
Control-G はインクリメンタル検索を異常終了させ、元の行を復元します。
検索が終了すると、検索文字列を含む履歴エントリが現在の行になります。
マッチした他の履歴リストのエントリを見つけるには、Control-S または
Control-R を適宜入力します。これにより、
今まで入力した検索文字列にマッチする次のエントリを
履歴の前方または後方に向かって探します。
readline に割り当てられた他のキーシーケンスを入力すると検索が終わり、
そのコマンドが実行されます。例えば、改行は検索を終了させて、
その行を入力します。これにより、履歴リスト中のコマンドが実行されます。
インクリメンタルでない検索の場合には、
履歴行にマッチするものの検索を始める前に検索する文字列全体を読み込みます。
検索文字列には、ユーザが入力したものか、現在の行の内容の一部を使えます。
beginning-of-line (C-a)
end-of-line (C-e)
forward-char (C-f)
backward-char (C-b)
forward-word (M-f)
backward-word (M-b)
clear-screen (C-l)
redraw-current-line
accept-line (Newline, Return)
previous-history (C-p)
next-history (C-n)
beginning-of-history (M-<)
end-of-history (M->)
reverse-search-history (C-r)
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
yank-nth-arg (M-C-y)
n
が付いていると、前のコマンドの n 番目の単語
(前のコマンドの単語は 0 から数えます)。
引き数が負ならば、前のコマンドの最後から
n 番目の単語が挿入されます。
shell-expand-line (M-C-e)
history-expand-line (M-^)
magic-space
alias-expand-line
history-and-alias-expand-line
insert-last-argument (M-., M-_)
operate-and-get-next (C-o)
delete-char (C-d)
backward-delete-char (Rubout)
forward-backward-delete-char
quoted-insert (C-q, C-v)
tab-insert (C-v TAB)
self-insert (a, b, A, 1, !, ...)
transpose-chars (C-t)
transpose-words (M-t)
upcase-word (M-u)
downcase-word (M-l)
capitalize-word (M-c)
kill-line (C-k)
backward-kill-line (C-x Rubout)
unix-line-discard (C-u)
kill-whole-line
kill-word (M-d)
backward-kill-word (M-Rubout)
unix-word-rubout (C-w)
delete-horizontal-space (M-\)
kill-region
copy-region-as-kill
copy-backward-word
copy-forward-word
yank (C-y)
yank-pop (M-y)
digit-argument (M-0, M-1, ..., M--)
universal-argument
complete (TAB)
possible-completions (M-?)
insert-completions (M-*)
menu-complete
delete-char-or-list
complete-filename (M-/)
possible-filename-completions (C-x /)
complete-username (M-~)
possible-username-completions (C-x ~)
complete-variable (M-$)
possible-variable-completions (C-x $)
complete-hostname (M-@)
possible-hostname-completions (C-x @)
complete-command (M-!)
possible-command-completions (C-x !)
dynamic-complete-history (M-TAB)
complete-into-braces (M-{)
start-kbd-macro (C-x ()
end-kbd-macro (C-x ))
call-last-kbd-macro (C-x e)
re-read-init-file (C-x C-r)
abort (C-g)
do-uppercase-version (M-a, M-b, M-x, ...)
prefix-meta (ESC)
undo (C-_, C-x C-u)
revert-line (M-r)
tilde-expand (M-&)
set-mark (C-@, M-<space>)
exchange-point-and-mark (C-x C-x)
character-search (C-])
character-search-backward (M-C-])
insert-comment (M-#)
glob-expand-word (C-x *)
glob-list-expansions (C-x g)
dump-functions
dump-variables
dump-macros
display-shell-version (C-x C-v)
!
!n
n
行目のコマンドラインを参照します。
!-n
n
行前のコマンドラインを参照します。
!!
!string
string
で始まるコマンドのうち、一番現在に近いところで実行したものを参照します。
!?string[?]
string
を含むコマンドのうち、一番現在に近いところで実行したものを参照します。
string
の直後が改行文字ならば、最後の ? は省略しても構いません。
\d\s+2^\s-2\ustring1\d\s+2^\s-2\ustring2\d\s+2^\s-2\u
string1
を
string2
に置換して直前のコマンドを繰り返します。
``!!:s/string1/string2/'' と同義です
(後述の修飾子を参照)。
!#
0 (ゼロ)
n
^
$
%
x-y
*
x*
x-
h
t
r
e
p
q
x
s/old/new/
old
を
new
に置き換えます。/ の代わりに任意の区切り文字を使うこともできます。
最後の区切り文字がイベント行の最後の文字ならば、
これは省略できます。
old
と
new
の中では、
バックスラッシュ 1 つでクォートすれば区切り文字も使えます。
new
に & が含まれている場合には、これは
old
に置き換えられます。
バックスラッシュ 1 つを前に置けば & をクォートできます。
old
が空文字列ならば、これには前回に置換された
old
が設定されます。
以前に履歴置換が全く行われていない場合には、現在に一番近い
!?string[?]
の検索で使われた
string
が設定されます。
&
g
: [arguments]
arguments
を展開し、指定されたリダイレクトを実行する以外には何も行いません。
終了コード 0 を返します。
source filename [arguments]
filename
からコマンドを読み込み、現在のシェル環境のもとで実行します。そして
filename
中で最後に実行したコマンドの終了ステータスを返します。
filename
にスラッシュが含まれていない場合、
filename
は
PATH
に含まれるディレクトリから探されます。
PATH
内で検索されるファイルは、実行可能である必要はありません。
bash
が
posix モード
で動作していなければ、
PATH
中でファイルを見つけられなかった場合には、
カレントディレクトリが検索されます。
組み込みコマンド
shopt
に対する
sourcepath
オプションが無効にされている場合、
PATH
の検索は行われません。
何らかの arguments が与えられている場合、これらの引き数は
filename を実行した時の位置パラメータとなります。
そうでない場合は、位置パラメータは変更されません。
返却ステータスはスクリプト内で最後に実行したコマンドのステータスです
(コマンドが全く実行されなければ 0 です)。また
filename
が見つからない場合や読み込めない場合には偽となります。
alias [-p] [name[=value] ...]
bg [jobspec]
jobspec
は通常 0 を返しますが、ジョブ制御が無効であるときに実行した場合や、
ジョブ制御が有効であっても
jobspec
が有効なジョブを指定していない場合や
jobspec
がジョブ制御無しで実行したジョブを指定している場合は異なる値を返します。
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] keyseq:function-name
-m keymap
keymap
を、以降の割り当てによって変更します。指定できる
keymap
名は、emacs, emacs-standard, emacs-meta, emacs-ctlx, vi,
vi-move, vi-command, vi-insert です。
vi は vi-command と同じです。
また emacs は emacs-standard と同じです。
-l
-p
-P
-v
-V
-s
-S
-f filename
-q function
-u function
-r keyseq
-x keyseq:shell-command
break [n]
n
は 1 以上でなければなりません。
n
がループの深さよりも大きい場合には、全てのループから抜けます。
n
が 0 以下なら、返り値は 0 以外の値となります。
さもなければ、
break
は 0 を返します。
builtin shell-builtin [arguments]
arguments
を引き数として渡し、このコマンドの終了ステータスを返します。
これはシェル組み込みコマンドと同じ名前の関数を定義する時に便利で、
その関数内で組み込みコマンドを使った時に、その機能を損ないません。
組み込みコマンド
cd は普通、これを使って再定義されます。
shell-builtin
がシェル組み込みコマンドでなければ、終了ステータスは偽となります。
cd [-LP] [dir]
dir
のデフォルト値です。変数
CDPATH
は、
dir
を含むディレクトリの検索パスを定義します。
CDPATH
内ではディレクトリ名はコロン (:) で区切ります。
CDPATH
中に空のディレクトリ名がある場合、これはカレントディレクトリ
(つまり ``.'') を意味します。
dir
がスラッシュ (/) で始まる場合には、
CDPATH
は使われません。
-P
オプションは、シンボリックリンクを辿らないで物理的なディレクトリ構造を
使うように指示します (組み込みコマンド
set
の
-P
オプションも参照)。
-L
オプションを指定すると、シンボリックリンクを辿るようになります。
引き数に
-
を指定するのは、
$OLDPWD
を指定するのと同じ意味です。
ディレクトリの変更が成功した場合には返り値は真になります。
そうでない場合には偽になります。
command [-pVv] command [arg ...]
command
に引き数
args
を付けて実行します。シェル関数の通常の参照は行いません。
組み込みコマンドと
PATH
内で見つかるコマンドだけが実行されます。
-p
オプションが与えられると、
command
の検索を行う際に
PATH
のデフォルト値が使われます。これにより、
標準ユーティリティを全て確実に見つけられます。
-V
オプションまたは
-v
オプションを与えると、
command
の説明が出力されます。
-v
オプションでは、
command
を起動する時に使われるコマンドやファイル名を示す単語が表示されます。
-V
ではさらに詳しい説明が表示されます。
-V
オプションや
-v
オプションを与えた場合、終了ステータスは
command
が見つかれば 0 となり、見つからなければ 1 となります。
どちらのオプションも与えなかった場合に、エラーが起きたり
command
を見つけられなかったりすると、終了ステータスは 127 になります。
それ以外の場合には、組み込みコマンド
command
の終了ステータスは、
command
の終了ステータスです。
compgen [option] [word]
complete -pr [name ...]
-o comp-option
comp-option
は補完仕様の動作をいくつかの点から制御し、
単純な補完生成以外ができるようにします。
comp-option
には以下のどれかひとつを指定できます。
default
dirnames
filenames
-A action
alias
arrayvar
binding
builtin
command
directory
disabled
enabled
export
file
function
helptopic
hostname
job
keyword
running
setopt
shopt
signal
stopped
user
variable
-G globpat
-W wordlist
-C command
-F function
-X filterpat
-P prefix
-S suffix
continue [n]
n
を指定すると、深さを n 個分上がったループで実行を継続します。
n
は 1 以上でなければなりません。
n
がループの深さよりも大きい場合、
最後のループ (「トップレベル」のループ) で実行が継続されます。
ループの中で
continue
が実行された時に、
n
が 0 以下なら、返り値は 0 以外の値となります。
さもなければ、
continue
は 0 を返します。
ループの外で
continue
が実行された時には、返り値は 0 となります。
typeset [-afFirx] [-p] [name[=value]]
name
それぞれの属性と値が表示されます。
-p
を使うと他のオプションは無視されます。
-F
オプションを指定すると、関数定義の表示を止めます。
関数の名前と属性だけが出力されます。
-F
オプションを指定すると、
-f
オプションも指定したことになります。以下のオプションを使うと、
指定した属性を持つ変数の出力を制限したり、
変数に属性を与えたりできます:
-a
-f
-i
-r
-x
dirs [-clpv] [+n] [-n]
+n
-n
-c
-l
-p
-v
disown [-ar] [-h] [jobspec ...]
jobspec
がアクティブなジョブのテーブルから削除されます。
-h オプションが与えられている場合、どの
jobspec
もテーブルから削除されず、
シェルが
SIGHUP
を受け取ってもそのジョブには
SIGHUP
が送られないように印が付けられます。
jobspec
がなく、かつ
-a
オプションも
-r
オプションも与えられていない場合には、カレントジョブが使われます。
jobspec
が与えられていない場合、
-a
オプションは全てのジョブを削除するか
全てのジョブに印を付けるという意味
となります。
jobspec
引き数なしで
-r
オプションを指定すると、
実行中のジョブだけが操作の対象となります。
jobspec
が不正なジョブを指定していなければ、返り値は 0 となります。
echo [-neE] [arg ...]
\a
\b
\c
\e
\f
\n
\r
\t
\v
\\
\0nnn
\xnnn
enable [-adnps] [-f filename] [name ...]
name
を共有オブジェクト
filename
からロードするという意味です。
これは動的ロードをサポートしているシステムで使えます。
-d
オプションは、以前に
-f
オプションでロードした組み込みコマンドを削除します。
引き数 name が与えられなかった場合や、
-p
オプションが与えられた場合、
シェルの組み込みコマンドのリストが表示されます。
他にオプション引き数が指定されていない場合には、
有効になっているシェル組み込みコマンド全てからなるリストが表示されます。
-n を与えると、無効にされている組み込みコマンドだけが出力されます。
-a を与えると、
それぞれ有効かどうかの表示付きで全ての組み込みコマンドが出力されます。
-s を与えると、出力されるのは
POSIX の特殊組み込みコマンドだけに制限されます。
name
がシェル組み込みコマンドでない場合と、
共有オブジェクトからの新しい組み込みコマンドのロードに失敗した場合を除き、
返り値は 0 となります。
eval [arg ...]
args
が無い場合や空の引き数しかない場合には
eval
は 0 を返します。
exec [-cl] [-a name] [command [arguments]]
command
が指定されていると、シェルはこのコマンドに置き換えられます。
新しいプロセスは生成されません。
arguments
は command に対する引き数となります。
-l
オプションを与えると、シェルは
command
に渡す 0 番目のオプションの先頭にダッシュを設定します。
これは
login (1)
が行う動作です。
-c
オプションを与えると、
command
は空の環境で実行されます。
-a
を与えると、シェルは実行するコマンドに 0 番目の引き数として
name
を渡します。何らかの理由で
command
が実行できない場合には非対話的シェルは終了します。
ただしシェルオプション
execfail
が設定されている場合は終了せず、この場合には偽が返されます。
ファイルが実行できない場合には、対話的シェルは偽を返します。
command
が指定されていない場合、任意のリダイレクトはカレントシェルで効果を表し、
終了ステータスは 0 となります。
リダイレクトのエラーが起きた場合には、終了ステータスは 1 となります。
exit [n]
n
を省略すると、
終了ステータスは最後に実行したコマンドの終了ステータスとなります。
シェルが終了する前には、
EXIT
に対するトラップが実行されます。
export -p
name
には印が付けられ、
これ以降に実行するコマンドの環境に
自動的にエクスポートされるようになります。
-f
オプションを与えると、
name
は関数を参照します。
name
を与えなかった場合や、
-p
オプションを与えた場合には、
このシェル内でエクスポートされている全ての名前のリストが出力されます。
-n
オプションを与えると、指定した変数からエクスポート属性が取り除かれます。
不正なオプションがあった場合、
name のいずれかが不正なシェル変数名であった場合、
関数でない名前に対して
-f
オプションを与えた場合を除き、
export
は終了ステータス 0 を返します。
fc -s [pat=rep] [cmd]
first
から
last
までの範囲のコマンドが履歴リストから選択されます。
first
と
last
は文字列 (その文字列で始まる最後のコマンド) や
数値 (履歴リスト中でのインデックス。
負の値は現在のコマンド番号からのオフセットとして扱われます)
としても指定できます。
last
が指定されていなければ、リスト表示の場合には現在のコマンドが設定され
(したがって
``fc -l -10''
で最近のコマンド 10 個が出力されます)、それ以外の場合には
first
が設定されます。
first
が指定されていなければ、編集の場合には前のコマンドが設定され、
リスト表示の場合には -16 が設定されます。
ename
で指定したエディタが起動されます。
ename
が与えられていない場合は、変数
FCEDIT
の値が使われ、
FCEDIT
も設定されていない場合には
EDITOR
の値が使われます。
どちらの変数も設定されていなければ、
vi
が使われます。
編集が終了すると、編集されたコマンドがエコー表示され、実行されます。
first
または
last
が履歴行の範囲外を指定していなければ、返り値は 0 となります。
-e
オプションが与えられた場合、
返り値は最後に実行されたコマンドの返り値となるか、
あるいはコマンドの一時ファイルでエラーが起きた場合には偽となります。
2 番目の形式を用いた場合、
終了ステータスは再実行されたコマンドの終了ステータスとなります。
ただし、
cmd
が有効な履歴行を指定していない場合は別で、この場合には
fc
は偽を返します。
fg [jobspec]
jobspec
の実行をフォアグラウンドで再開し、これをカレントジョブとします。
jobspec
が無い場合、シェルが記録しているカレントジョブが使われます。
返り値はフォアグラウンドで再開されたコマンドの返り値ですが、
ジョブ制御が無効であるときに実行した場合や、
ジョブ制御が有効であっても
jobspec
が有効なジョブを指定していない場合や
jobspec
がジョブ制御無しで実行したジョブを指定している場合には偽となります。
getopts optstring name [args]
optstring
は識別の対象であるオプション文字列です。
ある文字の後にコロンがある場合、
そのオプションは引き数を取ることが期待されます。
引き数は空白でオプション文字と区切られていなければなりません。
コロンと疑問符はオプション文字として使えません。
呼び出される度に、
getopts
は次に見つかったオプションをシェル変数
name
に格納し
( name
が存在しなければ初期化を行います)、
次に処理される引き数のインデックスを変数
OPTIND
に格納します。
OPTIND
はシェルまたはシェルスクリプトが呼び出される度に 1 に初期化されます。
オプションが引き数を必要とする場合には、
getopts
はその引き数を変数
OPTARG
に格納します。
シェルが
OPTIND
を自動的に再設定することはありません。
1 つのシェルが呼び出されている間に別のパラメータの組合せを使う場合には、
getopts
の呼び出しの間に手動で再設定を行わなければなりません。
args
に指定されている場合には、
getopts
は位置パラメータでなくこれらを展開します。
optstring
の最初の文字がコロンならば、
静かな (silent)
エラー報告が行われます。
通常の操作では、不正なオプションがある場合や
オプションの引き数が足りない場合に診断メッセージが出力されます。
変数
OPTERR
に 0 が設定されている場合、エラーメッセージは全く出力されません。
これは、
optstring
の最初の文字がコロンでなくても同じです。
name
に設定します。
さらに、静かなモードでない場合にはエラーメッセージが出力され、
OPTARG
の設定が取り消されます。
getopts
が静かなモードであれば、見つかったオプション文字は
OPTARG
に設定され、診断メッセージは出力されません。
name
に設定され、
OPTARG
の設定が取り消され、診断メッセージが出力されます。
getopts
が静かなモードならば、コロン (:) が
name
に設定され、
OPTARG
には見つかったオプション文字が設定されます。
hash [-r] [-p filename] [name]
name
それぞれに対して、
$PATH
内のディレクトリの検索を行ってコマンドの完全なファイル名を調べ、
その結果を記憶します。
-p
オプションが指定されると、パス検索は実行されず、
filename
がそのコマンドの完全なファイル名として使われます。
-r
オプションを与えると、シェルは記憶している位置を全て忘れます。
引き数が与えられていない場合は、
記憶しているコマンドに関する情報が出力されます。
name
が見つからない場合と不正なオプションが与えられた場合を除き、
返却ステータスは真となります。
help [-s] [pattern]
pattern
が指定された場合には、
help
はこの
pattern
にマッチする全てのコマンドに関する詳しいヘルプを出力します。
それ以外の場合には、
全ての組み込みコマンドと制御構造についての説明が出力されます。
-s オプションは、表示されるヘルプ情報を短い書式の使用法に限定します。
pattern
にマッチするコマンドが全くない場合を除き、返却ステータスは 0 です。
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]
n
を指定すると、最新の
n
行だけがリスト表示されます。
filename が与えられている場合、
これは履歴ファイルの名前として使われます。
これが与えられていない場合には
HISTFILE
の値が使われます。(指定されていれば) オプションは以下の意味を持ちます:
-c
-d offset
-a
-n
-r
-w
-p
-s
args
を 1 つのエントリとして履歴リストに格納します。
履歴リストの最後のコマンドは、
args
が追加される前に削除されます。
不正なオプションがある場合、
履歴ファイルの読み書きの間にエラーが起きた場合、
-d オプションの引き数として不正な offset の値が与えられた場合、
-p オプションの引き数として与えられた履歴展開が失敗した場合を除き、
返り値は 0 になります。
jobs -x command [ args ... ]
-l
-p
-n
-r
-s
jobspec
が与えられている場合、
そのジョブに関する情報だけが出力されるます。
不正なオプションがある場合や、不正な
jobspec
が与えられた場合を除き、返却ステータスは 0 です。
-x
オプションが与えられた場合、
jobs
は
command
や
args
中で見つかった
jobspec
を全て対応するプロセスグループ ID に置き換え、
args
を渡して
command
を実行し、その終了ステータスを返します。
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]
+n
-n
-n
printf format [arguments]
pushd [-n] [+n] [-n]
+n
-n
-n
dir
dir
をディレクトリスタックの一番上に追加します。
また、このディレクトリを新しいカレントの作業ディレクトリにします。
pushd
コマンドが成功すると、
dirs
コマンドも実行されます。
最初の形式を使った場合、
dir
への cd が失敗しなければ、
pushd
は 0 を返します。
2 番目の形式を使った場合にも、
pushd
は基本的には 0 を返します。
ただし、ディレクトリスタックが空の場合・
ディレクトリスタックの存在しない要素が指定された場合・
指定された新しいカレントディレクトリへの
ディレクトリ変更が失敗した場合は除きます。
pwd [-LP]
read [-ers] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]
name
に代入し、2 番目の単語を 2 番目の
name
に代入します。以降も同様です。
余った単語とそれらの間の区切り文字は、最後の
name
に代入されます。
name
よりも標準入力から読み込んだ単語の方が少ない場合には、
余っている
name
には空文字列が値として代入されます。
IFS
中の文字が、行を単語に分割するために使われます。
バックスラッシュ文字 (\) を使うと、
次に読み込んだ文字の特殊な意味を消したり、行を連結したりできます。
オプションが与えられていれば、以下の意味を持ちます:
-a aname
aname
にインデックス順に代入します。インデックスは 0 から始まります。
新しい値が代入される前には、
aname
の設定は消されます。他の
name
引き数は無視されます。
-d delim
-e
-n nchars
-p prompt
-r
-s
-t timeout
name
が全く与えられていない場合、読み込まれた行は変数
REPLY
に代入されます。ファイル末尾に到達したり
read がタイムアウトしたりしなければ、終了コードは 0 です。
readonly [-apf] [name ...]
name
の値を変更することはできません。
-f
オプションを与えた場合、name に対応する関数に同様の印が付きます。
-a
オプション与えると、配列変数だけが対象となります。
name
引き数が全く与えられてない場合、または
-p
オプションが与えられた場合、読み込み専用の名前全ての一覧が出力されます。
-p
オプションを使うと、
入力として再利用できるようなフォーマットで出力が行われます。
返却ステータスは基本的に 0 ですが、
不正なオプションがあった場合、
name
のいずれかが有効なシェル変数名で無かった場合、
-f
オプションに関数でない
name
を与えた場合は除きます。
return [n]
n
で関数を終了させます。
n
を省略すると、返却ステータスは
関数内で最後に実行したコマンドの返却ステータスになります。
関数の外側で使われているが、
(source) コマンドによるスクリプトの実行中である場合、
シェルはそのスクリプトの実行を止め、
n
またはスクリプト内で最後に実行されたコマンドの終了ステータスを
スクリプトの終了ステータスとして返します。
関数の外側で . によるスクリプトの実行中以外に使われた場合、
返却ステータスは偽となります。
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
-a
-b
-e
until
または
while
ループの一部である、
if
文の一部である、
&&
または
bvbv
リストの一部である、
コマンドの返り値が
!
で反転されている、のいずれかの場合にはシェルは終了しません。
-f
-h
-k
-m
-n
-o option-name
allexport
braceexpand
emacs
errexit
hashall
histexpand
history
ignoreeof
keyword
monitor
noclobber
noexec
noglob
notify
nounset
onecmd
physical
posix
privileged
verbose
vi
xtrace
-p
特権 (privileged)
モードを有効にします。このモードでは
$ENV
と
$BASH_ENV
ファイルは処理されず、シェル関数は環境から継承されず、
SHELLOPTS
環境変数は定義されていても無視されます。
シェルを起動した時に実効ユーザ (グループ) ID が
実ユーザ (グループ) ID と異なり、
かつ -p オプションが与えられていない場合、
これらの動作が行われ、実効ユーザ ID には実ユーザ ID が設定されます。
起動時に -p オプションが与えられた場合、
実効ユーザ ID は再設定されません。
このオプションを無効にすると、
実効ユーザ ID と実効グループ ID には
実ユーザ ID と 実グループ ID が設定されます。
-t
-u
-v
-x
-B
-C
-H
-P
--
-
shift [n]
n
は 0 以上 $# 以下の数でなければなりません。
n
が 0 ならば、どのパラメータも変更されません。
n
が与えられない場合には、1 が指定されたものと見なされます。
n
が $# より大きい場合、位置パラメータは変化しません。
n
が
$#
より大きい場合や 0 より小さい場合には、
返却ステータスは 0 より大きい数になります。
それ以外の場合には 0 になります。
shopt [-pqsu] [-o] [optname ...]
-s
-u
-q
-o
cdable_vars
cdspell
checkhash
checkwinsize
cmdhist
dotglob
execfail
expand_aliases
extglob
histappend
histreedit
histverify
hostcomplete
huponexit
interactive_comments
lithist
mailwarn
no_empty_cmd_completion
nocaseglob
nullglob
progcomp
promptvars
restricted_shell
shift_verbose
sourcepath
xpg_echo
suspend [-f]
[ expr ]
! expr
expr
が偽ならば真になります。
( expr )
expr1 -a expr2
expr1
と
expr2
が両方とも真ならば真になります。
expr1 -o expr2
expr1
と
expr2
のいずれかが真ならば真になります。
test および [ は、
引き数の数に基づいた規則の集合を用いて条件式を評価します。
.sp 1
引き数が 0 個
引き数が 1 個
引き数が 2 個
引き数が 3 個
引き数が 4 個
引き数が 5 個以上
times
trap [-lp] [arg] [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
オプションを使うと、
type
は
name
をコマンド名として指定した場合に実行されるディスクファイルの名前、
または空文字列を返します。
空文字列が返されるのは、
``type -t name''
が
file
を返さない場合です。
コマンドがハッシュされている場合、
-p
はハッシュされている値を表示します。
表示されるのは、必ずしも
PATH
中で最初に現われるファイルとは限りません。
-a
オプションを使うと、
type
は
name
が示す実行ファイルがある場所を全て出力します。
-p
オプションが同時に使われていない場合に限り、
エイリアスや関数も出力されます。
-a
を使う時には、ハッシュされているコマンドの表は参照されません。
type
は、引き数のいずれかが見つかれば真を返し、
どれも見つからなければ偽を返します。
ulimit [-SHacdflmnpstuv [limit]]
limit
の値はリソースに対して指定されている単位の数、または
unlimited
です。
-H オプションと -S オプションは、
それぞれ与えられたリソースに対する
強い (hard) 制限と弱い (soft) 制限を設定します。
強い制限は一度設定すると増やせません。
弱い制限は強い制限の値までは増やせます。
-H と -S がどちらも指定されていない場合、
強い制限と弱い制限がどちらも設定されます。
limit
を省略すると、リソースの弱い制限の現在値が表示されます。
ただし、-H が与えられている場合は除きます。
複数のリソースが指定されている時は、制限名と単位が値の前に出力されます。
他のオプションは以下のように解釈されます:
-a
-c
-d
-f
-l
-m
-n
-p
-s
-t
-u
-v
limit
が与えられている場合、これは指定されたリソースの新しい値となります
( -a
は表示専用です)。
オプションが全く与えられなかった場合は、
-f
が指定されたものと見なされます。
値は 1024 バイト単位で増えますが、例外として
-t
は秒単位、
-p
512 バイトブロック単位、
-n
および
-u
は単位無しの値です。
返却ステータスは基本的に 0 ですが、
不正なオプションがある場合、
unlimited 以外の数字でない引き数が limit に指定された場合、
新しい制限を設定する際にエラーが起きた場合は除きます。
umask [-p] [-S] [mode]
mode
が数字で始まる場合には、これは 10 進数と解釈されます。
それ以外の場合には、
chmod (1)
に指定するのと同様のシンボリックなモードマスクと解釈されます。
mode
が省略されると、現在のマスクの値が出力されます。
-S
オプションを指定すると、マスクはシンボリックな形式で表示されます。
デフルトの出力は 10 進の数値です。
-p
オプションが指定され、かつ
mode
が省略された場合、入力として再利用できる形式で出力が行われます。
モードが正常に変更できた場合や、
mode 引き数が全く与えられなかった場合には、
返却ステータスは 0 となります。
それ以外の場合には偽となります。
unalias [-a] [name ...]
name
が定義されているエイリアスであれば、返却ステータスは真になります。
unset [-fv] [name ...]
name
はシェル変数を参照します。
読み込み専用の変数の設定を消すことはできません。
-f
が指定されている場合、各
name
はシェル関数を参照し、その関数の定義が削除されます。
設定が消された変数や関数は全て、
それ以降のコマンドに渡される環境変数からも削除されます。
RANDOM ,
SECONDS ,
LINENO ,
HISTCMD ,
FUNCNAME ,
GROUPS ,
DIRSTACK
のいずれかの設定を消した場合、これらの特殊な特性も無くなります。
これは後で再設定しても元に戻ることはありません。
name
が存在しないか、読み込み専用の場合以外には、
終了ステータスは真となります。
wait [n]
n
はプロセス ID またはジョブ指定です。
ジョブ指定を与えた場合、そのジョブのパイプラインに含まれる
全てのプロセスを wait します。
n
が与えられていない場合には、現在アクティブな全ての子プロセスを wait し、
返却ステータスは 0 となります。
n
が存在しないプロセスやジョブを指定している場合、
返却ステータスは 127 になります。
それ以外の場合、返却ステータスは
wait していた最後のプロセスまたはジョブの終了ステータスとなります。
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)
/bin/bash
/etc/profile
~/.bash_profile
~/.bashrc
~/.bash_logout
~/.inputrc
bashbug
コマンドを使ってバグ報告を行います。
バグを修正してくださった場合には、
ぜひその内容も一緒にメールしてください!
提案や「哲学上の」バグ報告は、bug-bash@gnu.org にメールしたり、
ニュースグループの
gnu.bash.bug
に投稿してくださっても構いません。
バグ報告には必ず以下のことを書いてください:
bash のバージョン
ハードウェアとオペレーティングシステム
コンパイルに使ったコンパイラ
バグ動作の説明
バグを再現できる簡単なシェルスクリプトまたは「レシピ」
bashbug
コマンドは、バグ報告を送るために用意されているテンプレートに、
最初の 3 項目を自動的に書き込みます。
このオンラインマニュアルに関するコメントやバグ報告は
chet@ins.CWRU.Edu
宛にお願いします。