Bash Basics | Basicsトップページ | トップページ

組み込みコマンド

組み込みコマンドを確認する場合、端末で help と入力します。

$ help
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
These shell commands are defined internally.  Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.

A star (*) next to a name means that the command is disabled.

 job_spec [&]                            history [-c] [-d offset] [n] or hist>
 (( expression ))                        if COMMANDS; then COMMANDS; [ elif C>
 . filename [arguments]                  jobs [-lnprs] [jobspec ...] or jobs >
 :                                       kill [-s sigspec | -n signum | -sigs>
 [ arg... ]                              let arg [arg ...]
 [[ expression ]]                        local [option] name[=value] ...
 alias [-p] [name[=value] ... ]          logout [n]
 bg [job_spec ...]                       mapfile [-n count] [-O origin] [-s c>
 bind [-lpvsPVS] [-m keymap] [-f filen>  popd [-n] [+N | -N]
 break [n]                               printf [-v var] format [arguments]
 builtin [shell-builtin [arg ...]]       pushd [-n] [+N | -N | dir]
 caller [expr]                           pwd [-LP]
 case WORD in [PATTERN [| PATTERN]...)>  read [-ers] [-a array] [-d delim] [->
 cd [-L|[-P [-e]]] [dir]                 readarray [-n count] [-O origin] [-s>
 command [-pVv] command [arg ...]        readonly [-aAf] [name[=value] ...] o>
 compgen [-abcdefgjksuv] [-o option]  >  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE] >  select NAME [in WORDS ... ;] do COMM>
 compopt [-o|+o option] [-DE] [name ..>  set [-abefhkmnptuvxBCHP] [-o option->
 continue [n]                            shift [n]
 coproc [NAME] command [redirections]    shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFgilrtux] [-p] [name[=va>  source filename [arguments]
 dirs [-clpv] [+N] [-N]                  suspend [-f]
 disown [-h] [-ar] [jobspec ...]         test [expr]
 echo [-neE] [arg ...]                   time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [na>  times
 eval [arg ...]                          trap [-lp] [[arg] signal_spec ...]
 exec [-cl] [-a name] [command [argume>  true
 exit [n]                                type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or ex>  typeset [-aAfFgilrtux] [-p] name[=va>
 false                                   ulimit [-SHacdefilmnpqrstuvx] [limit>
 fc [-e ename] [-lnr] [first] [last] o>  umask [-p] [-S] [mode]
 fg [job_spec]                           unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMAND>  unset [-f] [-v] [name ...]
 for (( exp1; exp2; exp3 )); do COMMAN>  until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or name >  variables - Names and meanings of so>
 getopts optstring name [arg]            wait [id]
 hash [-lr] [-p pathname] [-dt] [name >  while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]               { COMMANDS ; }

組み込みコマンドは - で始まる「オプション」を受け付けます。また、オプションの終わりを示す -- も受け付けます。
組み込みコマンド :truefalsetest はオプションを持たないため、-- を特別扱いはしません。
組み込みコマンド exitlogoutbreakcontinueletshift はオプションを持たないため、 - で始まる文字列を引き数として処理します。-- も同様です。
そのほかのコマンドは明記されているオプション以外を引き数として受け取るため、- で始まる引き数は不正なオプションとして解釈されます。これを防ぐために -- を用いて明示的にオプションの終了を指定します。
bashの組み込みコマンドの一覧を以下に示します。
各組み込みコマンドの詳細は helpコマンドの引き数として知りたいコマンドを指定することで確認可能です。

コマンド 説明
.
source
ファイル名 [引き数]
source. ファイル [引き数]

ファイルを読み込み、シェルのスクリプトとして現在のシェルで実行します。
ファイルの中で最後に実行したコマンド終了ステータスを返します。
ファイルに/が含まれていない場合、ファイルはPATHから検索されます。PATHから検索されるファイルは実行可能である必要はありません。
bashがPOSIXモードではない時、PATHからファイルを見つけられなかった場合、カレントディレクトリも検索されます。
sourcepathが無効化されている場合、PATHからの検索は行われません。
引き数が指定された場合、ファイルを実行する時の位置パラメータとして設定されます。引き数が指定されなかった場合、位置パラメータは変更されません。
ファイル内のコマンドが1つも実行されなかった場合、終了ステータスとして0が返されます。
ファイルが見つからなかった場合、および読み込めなかった場合、0以外か返されます。
: : [引き数]

ヌルコマンドと呼ばれ、引き数の展開とリダイレクションを行う以外、何もしません。常に終了ステータス0を返します。
$ : ${VAR=VAL} ${var=val} echo $VAR $var
$ echo $VAR $var
val val
[
test
[ [] ]
test []

与えられた条件式を評価し、真の場合は終了ステータス0を返し、偽の場合は終了ステータス1を返します。
[ は最後の引き数として式を閉じる ] を指定する必要があります。
[ の後ろにスペース、] の前にスペースを開ける必要があります。
演算子とオペランドは別々の引き数として指定する必要があります。

式は以下の演算子を使用して結合することができます。演算子の優先順位に従って説明しています。複数の演算子が使用された場合、優先順位の高いものから評価されます。
  1. ! 式
    式の真、偽を否定(反転)します。つまり、式が真の場合は偽を返し、式が偽の場合は真を返します。
    test ! 1 -eq 1; echo $?
    1
    $ test ! 1 -eq 0; echo $?
    0
    
  2. ( 式 )
    式の値を返します。()で式を囲むことで演算子の優先度を高くすることができます。
    test 1 -eq 2 -a 1 -eq 1 -o 3 -eq 3; echo $?
    0
    $ test 1 -eq 2 -a \( 1 -eq 1 -o 3 -eq 3 \); echo $?
    1
    
  3. 式1 -a 式2
    式1と式2の両方が真の場合のみ真を返し、それ以外の場合、偽を返します。
    test 1 -eq 1 -a "abc" = "abc"; echo $?
    0
    $ test 1 -eq 1 -a "abc" = "xyz"; echo $?
    1
    
  4. 式1 -o 式2
    式1、または式2のどちらかが真の場合、真を返し、それ以外の場合、偽を返します。
    test 1 -eq 1 -o "abc" = "abc"; echo $?
    0
    $ test 1 -eq 1 -o "abc" = "xyz"; echo $?
    0
    
引き数の数に基づいて条件式を評価します。
  • 引数の数が0の場合
    常に偽を返します。
    test; echo $?
    1
    
  • 引数の数が1の場合
    引き数が空文字列でなければ真を返し、空文字列の場合は偽を返します。
    $ test true; echo $?
    0
    $ test false; echo $?
    0
    $ test ''; echo $?
    1
    $ test ' '; echo $?
    0
    
  • 引数の数が2の場合
    最初の引数が!であれば、2番目の引数が空文字列の場合のみ真を返し、それ以外の場合は偽を返します。
    最初の引数が条件式で説明されている単項条件演算子であれば、単項式の評価が真の場合のみ真を返し、それ以外の場合は偽を返します。
    最初の引数が正しい単項条件演算子でなければ、偽を返します。
  • 引数の数が3の場合
    以下の順に評価されます。
    1. 2番目の引数が条件式で説明されている二項条件演算子であれば、最初の引き数と3番目の引き数をオペランドとして二項式の評価結果を返します。
      -aと-oは二項演算子として扱われます。
    2. 最初の引数が!であれば、2番目の引き数と3番目の引き数を評価した結果を否定したを値を返します。
    3. 最初の引数が(、3番目の引数が)であれば、2番目の引き数を評価した結果を返します。
    4. 上記以外の場合、偽を返します。
    $ VAR=var
    $ [ "$VAR" = "var" ]
    $ echo $?
    0
    $ [ "$VAR" = "foo" ]
    $ echo $?
    1
    $ test "$VAR" = "foo"
    $ echo $?
    1
    
  • 引数の数が4の場合
    最初の引数が!であれば、残りの引き数で上記の「引数が3の場合」の結果を否定した結果を返します。
    それ以外の場合には演算子の優先順位に従って評価した結果を返します。
  • 引数の数が5以上の場合
    演算子の優先順位に従って評価した結果を返します。
[[]] 複合コマンド[[]]です。
与えられた条件式を評価し、真の場合は終了ステータス0を返し、偽の場合は終了ステータス1を返します。
[[ の後ろにスペース、]] の前にスペースを開ける必要があります。
"[" と比較して以下のような差があります。
  • &&|| を使用して論理演算が可能。"[" では -a や -o を使用することで論理演算が可能。
  • 単語分割を行わない。
  • パス名展開を行わなず、パターンマッチ、拡張正規表現が使用可能。
$ VAR=5
$ [[ $VAR -gt 3 && $VAR -lt 6 ]]
$ echo $?
0
VAR="abc def"
$ [[ $VAR = "abc" ]]
$ echo $?
1
$ [[ $VAR = abc* ]]
$ echo $?
0
$ [[ $VAR =~ ^abc[\w]+$ ]]
$ echo $?
1
$ [[ $VAR =~ ^abc.+$ ]]
$ echo $?
0
alias alias [-p] [エイリアス[=置換する文字列] ...]

aliasコマンドを引き数を指定せずに実行するか、-pオプションを指定して実行すると、現在の実行環境に登録されている全てのエイリアスのリストが「alias エイリアス名=置換文字列」の形式で標準出力に出力されます。
置換文字列が指定されていない(エイリアス名だけの)引き数が指定された場合、そのエイリアス名で登録されているエイリアスが「alias エイリアス名=置換文字列」の形式で標準出力に出力され、真の値を返します。エイリアスが登録されていないエイリアス名が指定された場合は真以外を返します。
置換文字列が指定されている引き数が指定された場合、現在の実行環境エイリアスを登録します。
エイリアスの名前には、/、$、`、=、\、'、"、およびメタ文字は使用できませんが、置換される文字列には、メタ文字も含めてシェルの入力で記述できる文字は全て使用できます。
置換文字列の最後の文字が空白文字の場合、エイリアス展開された時、空白文字に続くの次の単語に対してもエイリアスかどうかが評価されます。
bg bg [ジョブの指定 ...]

サスペンドされているジョブをバックグラウンドで実行再開します。
ジョブの指定がされなかった場合、シェルが記憶しているカレントジョブ(フォアグラウンドで実行中に停止させられたジョブ、またはバックグラウンドで起動された最後のジョブ)をバックグラウンドで実行再開します。
bgは通常、終了ステータスとして0を返しますが、ジョブ制御が無効な場合やジョブの指定が有効ではない場合、終了ステータスとして0以外を返します。
bind bind [-m キーマップ] [-lpsvPSV]
bind [-m キーマップ] [-q 関数名] [-u 関数名] [-r キーシーケンス]
bind [-m キーマップ] -f ファイル名
bind [-m キーマップ] -x キーシーケンス:コマンド
bind [-m キーマップキーシーケンス:関数名
bind [-m キーマップキーシーケンス:readlineのコマンド

現在のreadlineのキーの割り当てと関数の割り当てを表示したり、キーシーケンスにreadlineの関数やマクロに割り当てを行います。
オプションは以下のような意味となります。
  • -m キーマップ
    割り当て変更する対象のreadlineのキーマップ(emacs、emacs-standard、emacs-meta、emacs-ctlx、vi、vi-move、vi-command、vi-insert)を指定します。
  • -l
    全てのreadline関数の名前をリスト表示します。
  • -p
    readline関数の名前と割り当てを表示します。
    表示されるリストは再び読み込みできる形式で出力されます。
  • -P
    readline関数の現在の名前と割り当てをリスト表示します。
  • -s
    マクロに割り当てられたreadlineのキーシーケンスとマクロが出力する文字列を表示します。
    表示されるリストは再び読み込みできる形式で出力されます。
  • -S
    マクロに割り当てられたreadlineのキーシーケンスとマクロが出力する文字列を表示します。
  • -v
    readlineの変数名と値をリスト表示します。
    表示されるリストは再び読み込みできる形式で出力されます。
  • -V
    readlineの現在の変数名と値をリスト表示します。
  • -f ファイル名
    指定されたファイルからキーの割り当てを読み込んで設定します。
  • -q 関数名
    指定されたreadlineの関数を呼び出すキーを問い合わせます。
  • -u 関数名
    指定されたreadlineの関数が割り当てられているキーを全て解除します。
  • -r キーシーケンス
    キーシーケンスに対する割り当てを解除します。
  • -x キーシーケンス:コマンド
    キーシーケンスが入力されるたびに、指定されたシェルのコマンドが実行されるように登録します。
    シェルのコマンドを実行する時、READLINE_LINEに編集中のreadlineバッファを設定し、READLINE_POINTに現在の挿入位置を設定します。実行するコマンドがこの変数の値を変更した場合、新しい値が編集の状態に反映されます。
上記のオプション以外の引き数は.inputrcに記述するのと同じ形式で指定します。
認識できないオプションが指定された場合やエラーが発生した場合以外では、終了ステータスとして0を返します。
break break [n]

forwhileuntilselectループから脱けます。
1以上の整数値が引き数nとして指定された場合、その数の深さのループから抜けます。指定された数が実際のループの深さよりも大きな値の場合、全てのループから抜けます。
nが1未満の値の場合以外は、終了ステータスとして0を返します。
builtin builtin 組み込みコマンド名 [引き数]

シェル組み込みコマンドと同名の関数が定義されている場合に、組み込みコマンドを明示的に実行します。引き数は指定された組み込みコマンドの引き数として渡されます。
組み込みコマンドの終了ステータスをそのまま返します。指定された組み込みコマンド名が組み込みコマンドでなかった場合、終了ステータスは0以外となります。
caller caller []

実行中のサブルーチン(関数、および.、またはsourceで実行しているスクリプト)の呼び出しのコンテキストとしてサブルーチンを呼び出した行番号とそのソースファイル名を返します。
式が与えられた場合、最上位のフレーム(現在実行中のフレーム)を0とする指定されたフレームの関数呼び出しのコンテキストを表示します。

以下のスクリプトcaller.shを作成して確認します。
#!/usr/bin/bash

# Sub Function A
function func_A () {
    # func_A:6 is called from main:34
    echo ${FUNCNAME[0]}:${LINENO} is called from ${{FUNCNAME[1]}:${BASH_LINENO[0]}
    func_B B1 B2
    return 0
}

# Sub Function B
function func_B () {
    # func_B:14 is called from func_A:7
    echo ${{FUNCNAME[0]}:${LINENO} is called from ${{FUNCNAME[1]}:${BASH_LINENO[0]}
    func_C C1 C2 C3 C4
    return 0
}

# Sub Function C
function func_C () {
    # func_C:22 is called from func_B:15
    echo ${{FUNCNAME[0]}:${LINENO} is called from ${{FUNCNAME[1]}:${BASH_LINENO[0]}
    for ((i=0, RTN=0; ${RTN}==0; i++))
    do
        caller $i
        RTN=$?
    done
    
    return 0
}

# メインの処理

func_A A1 A2 A3
echo "#### `basename $0` end ####"
$ ./caller.sh 
func_A:6 is called from main:34
func_B:14 is called from func_A:7
func_C:22 is called from func_B:15
15 func_B ./caller.sh
7 func_A ./caller.sh
34 main ./caller.sh
#### caller.sh end ####
case 詳細は複合コマンドcaseを参照してください。
指定された文字列とマッチするパターンのコマンドを実行します。
cd cd [-L|[-P [-e]]] [ディレクトリ]

指定されたディレクトリカレントディレクトリを変更します。
指定されたディレクトリが/で始まらない場合、CDPATHからディレクトリを検索します。見つかった場合、カレントディレクトリをそのディレクトリに変更します。/で始まるディレクトリが指定された場合、絶対パスとしてカレントディレクトリをそのディレクトリに変更します。
ディレクトリが省略された場合、HOMEの値がデフォルト値となり、ホームディレクトリカレントディレクトリに変更します。
ディレクトリ名の代わりに-を指定した場合、1つ前のディレクトリOLDPWDの値、この変数の値を変更した場合はその値)にカレントディレクトリを変更します。
CDPATHは変更先の候補となるディレクトリを:で区切って指定します。空のディレクトリCDPATHに指定されている場合、カレントディレクトリ(つまり、./)を意味します。
CDPATH内の空白でないディレクトリカレントディレクトリを変更する場合や-が指定されてOLDPWDの値のディレクトリカレントディレクトリを変更する場合、ディレクトリの変更が成功した場合、新しいディレクトリ絶対パス標準出力に出力され、終了ステータスとして0を返します。それ以外の場合、0以外を返します。
command command [-pvV] コマンド名 [引き数 ...]

コマンドと同名の関数が定義されている場合に、関数を参照せずに組み込みコマンド、またはPATHから検索される外部コマンドを実行します。 -v、または-Vオプションを指定した時にコマンドが見つかった場合、終了ステータスとして0を返します。
-v、または-Vオプションを指定した時にコマンドが見つからなかった場合、1を返します。-v、または-Vオプションを指定しなかった時にコマンドが見つからなかった場合、127を返します。
それ以外の場合、見つかったコマンドが実行され、その終了ステータスが返されます。
compgen compgen [オプション] [単語]

指定されたオプション(-p、-rを除いてcompleteと同じオプションが指定できます。)に従って単語にマッチする補完候補のリストを標準出力に出力します。
-F、および-Cオプションを指定して補完候補を生成するために実行された関数コマンドが設定した変数は利用可能であったとしても意味を持たないため、参照すべきではありません。
無効なオプションが指定された場合やマッチする補完候補が見つからなかった場合を除いて終了ステータスとして0が返されます。
compgen -b e
echo
enable
eval
exec
exit
export
$ compgen -e P
PATH
PWD
complete complete -pr [-DE] [名前 ...]
complete [-abcdefgjksuv] [-o 補完オプション] [-DE] [-A アクション] [-G 展開パターン] [-W 単語リスト] [-F 関数] [-C コマンド] [-X フィルタパターン] [-P プレフィックス] [-S サフィックス名前 [名前 ...]

指定された名前の引き数に対する補完動作を指定します。
オプションが何も指定されなかった場合、および-pオプションが指定された場合は現在の補完動作を再利用できる形式で標準出力に出力します。

-G、-W、-X、-P、-Sオプションの引き数はクォートして展開されないように指定する必要があります。
  • -p
    現在の補完動作を再利用できる形式で標準出力に出力します。
  • -r
    -rオプションと共に名前が指定された場合、指定された名前に対する補完動作を削除します。
    名前が指定されなかった場合、全ての補完動作を削除します。
  • -D
    補完動作が定義されていないコマンドに対するデフォルトの補完動作を指定します。
    例えば、補完動作が定義されていないコマンドに対して組み込みコマンドのリストを返したい場合には以下のように設定します。
    $ complete -D -b
    
    補完動作が定義されていないコマンドに対してホスト名のリストを返したい場合には以下のように設定します。
    $ complete -D -A hostname
    
    補完動作が定義されていないコマンドに対してデフォルトの補完動作に戻す場合は以下のように設定します。
    $ complete -D -o default
    
  • -E
    空のコマンド(空行)に対する補完動作を指定します。
    例えば、空行での補完動作で組み込みコマンドのリストを返したい場合には以下のように設定します。
    $ complete -E -b
    
    空行での補完動作でホスト名のリストを返したい場合には以下のように設定します。
    $ complete -E -A hostname
    
    空行での補完動作でデフォルトの補完動作に戻す場合は以下のように設定します。
    $ complete -E -o default
    
  • -a: エイリアス名を補完候補とします。
    -A aliasと同じ。
  • -b: 組み込みコマンド名を補完候補とします。
    -A builtinと同じ。
  • -c: コマンド名を補完候補とします。
    -A commandと同じ。
  • -d: ディレクトリを補完候補とします。
    -A directoryと同じ。
  • -e: エクスポートされた変数名を補完候補とします。
    -A exportと同じ。
  • -f: ファイルを補完候補とします。
    -A fileと同じ。
  • -g: グループ名を補完候補とします。
    -A groupと同じ。
  • -j: ジョブ制御が有効であれば、ジョブ名を補完候補とします。
    -A jobと同じ。
  • -k: シェルの予約語を補完候補とします。
    -A keywordと同じ。
  • -s: サービス名を補完候補とします。
    -A serviceと同じ。
  • -u: ユーザー名を補完候補とします。
    -A userと同じ。
  • -v: 全ての変数名を補完候補とします。
    -A variableと同じ。
  • -o 補完オプション
    単純な補完動作以外の挙動を制御するために、以下のいずれか1つを指定します。
    補完オプション説明
    bashdefault補完動作の結果、マッチするものが全くなかった場合、bashのデフォルトの補完を使用します。
    default補完動作の結果、マッチするものが全くなかった場合、readlineのデフォルトの補完を使用します。
    dirnames補完動作の結果、マッチするものが全くなかった場合、ディレクトリ名を補完しようとします。
    filenames補完動作でファイル名を生成することをreadlineに伝え、readlineがファイル名に特有な処理(ディレクトリ名に/を加えたり、特殊文字をクォートしたり、末尾の空白を削除したり、など)を行えるようにします。
    関数と共に用いることを想定しています。
    nospace行末で単語を補完した時、空白文字を付け加える動作(デフォルトの動作)をやめるようにreadlineに伝えます。
    plusdirs補完動作でマッチする候補が生成された後でディレクトリ名の補完を試み、他の動作の結果にマッチした候補が全て追加されます。
  • -A アクション
    以下のいずれか1つの補完動作を指定します。
    アクション説明
    aliasエイリアス名を補完候補とします。
    -aオプションと同じ意味となります。
    arrayvar配列変数を補完候補とします。
    bindingreadlineのキー割り当て名を補完候補とします。
    builtin組み込みコマンド名を補完候補とします。
    -bオプションと同じ意味となります。
    commandコマンド名を補完候補とします。
    -cオプションと同じ意味となります。
    directoryディレクトリを補完候補とします。
    -dオプションと同じ意味となります。
    disabled無効化されている組み込みコマンド名を補完候補とします。
    enabled有効化されている組み込みコマンド名を補完候補とします。
    exportエクスポートされた変数名を補完候補とします。
    -eオプションと同じ意味となります。
    fileファイルを補完候補とします。
    -fオプションと同じ意味となります。
    function関数名を補完候補とします。
    groupグループ名を補完候補とします。
    -gオプションと同じ意味となります。
    helptopic組み込みコマンドのhelpのトピック名を補完候補とします。
    hostnameHOSTFILEで指定されたファイルから得られたホスト名を補完候補とします。
    jobジョブ制御が有効であれば、ジョブ名を補完候補とします。
    -jオプションと同じ意味となります。
    keywordシェルの予約語を補完候補とします。
    -kオプションと同じ意味となります。
    $ complete -A keyword echo
    $ echoTabTab
    !         coproc    else      function  then      {
    [[        do        esac      if        time      }
    ]]        done      fi        in        until
    case      elif      for       select    while
    
    上記の例ではechoの補完候補としてシェルの予約語を出力しています。
    runningジョブ制御が有効であれば、実行中のジョブ名を補完候補とします。
    serviceサービス名を補完候補とします。
    -sオプションと同じ意味となります。
    setoptsetの-oオプションで指定できるオプション名を補完候補とします。
    shoptshoptで指定できるオプション名を補完候補とします。
    signalシグナル名を補完候補とします。
    $ complete -A signal echo
    $ echoTabTab
    DEBUG        SIGINT       SIGRTMAX-11  SIGRTMIN     SIGRTMIN+6   SIGTTOU
    ERR          SIGIO        SIGRTMAX-12  SIGRTMIN+1   SIGRTMIN+7   SIGURG
    EXIT         SIGJUNK(32)  SIGRTMAX-13  SIGRTMIN+10  SIGRTMIN+8   SIGUSR1
    RETURN       SIGJUNK(33)  SIGRTMAX-14  SIGRTMIN+11  SIGRTMIN+9   SIGUSR2
    SIGABRT      SIGKILL      SIGRTMAX-2   SIGRTMIN+12  SIGSEGV      SIGVTALRM
    SIGALRM      SIGPIPE      SIGRTMAX-3   SIGRTMIN+13  SIGSTKFLT    SIGWINCH
    SIGBUS       SIGPROF      SIGRTMAX-4   SIGRTMIN+14  SIGSTOP      SIGXCPU
    SIGCHLD      SIGPWR       SIGRTMAX-5   SIGRTMIN+15  SIGSYS       SIGXFSZ
    SIGCONT      SIGQUIT      SIGRTMAX-6   SIGRTMIN+2   SIGTERM      
    SIGFPE       SIGRTMAX     SIGRTMAX-7   SIGRTMIN+3   SIGTRAP      
    SIGHUP       SIGRTMAX-1   SIGRTMAX-8   SIGRTMIN+4   SIGTSTP      
    SIGILL       SIGRTMAX-10  SIGRTMAX-9   SIGRTMIN+5   SIGTTIN
    
    上記の例ではechoの補完候補としてシグナル名を出力しています。
    stoppedジョブ制御が有効であれば、一時停止中のジョブ名を補完候補とします。
    userユーザー名を補完候補とします。
    -uオプションと同じ意味となります。
    variable全ての変数名を補完候補とします。
    -vオプションと同じ意味となります。
  • -G 展開パターン
    指定されたパス名展開のパターンを展開し、補完候補のリストを生成します。
    $ touch file{01,02,03,04,05,06,07,08,09,10}{.txt,.doc}
    $ ls
    file01.doc  file03.doc	file05.doc  file07.doc	file09.doc
    file01.txt  file03.txt	file05.txt  file07.txt	file09.txt
    file02.doc  file04.doc	file06.doc  file08.doc	file10.doc
    file02.txt  file04.txt	file06.txt  file08.txt	file10.txt
    $ complete -G '*.txt' echo
    $ echoTabTab
    file01.txt  file03.txt  file05.txt  file07.txt  file09.txt  
    file02.txt  file04.txt  file06.txt  file08.txt  file10.txt
    $ echo file
    
    上記の例ではechoの補完候補として'*.txt'を展開しています。
  • -W 単語リスト
    指定された単語リストをIFSによって単語に区切って、補完候補のリストを生成します。
    $ arr=(apple orange melon banana grape)
    $ complete -W "${arr[*]}" echo
    $ echoTabTab
    apple   banana  grape   melon   orange  
    
  • -F 関数
    指定された関数を現在のシェルの環境で実行し、適切な補完候補をCOMPREPLYの値に代入し、その値を補完候補とします。
  • -C コマンド
    指定されたコマンドをサブシェルで実行し、その標準出力の行ごとの文字列を補完候補とします。
    コマンドを実行する時、引き数として以下の値をコマンドに渡します。
    1. 補完を行っているコマンド行のコマンド
    2. 補完対象の単語
    3. 補完対象の前の単語
    complete -C 'printf "コマンド:%s\n補完対象:%s\n直前の単語:%s"' echo
    $ echo a bTab
    コマンド:echo  直前の単語:a   補完対象:b   
    $ echo a b  Tab
    コマンド:echo  直前の単語:b   補完対象:   
    
    上記の最初の例ではecho a bと入力し、空白を空けずに補完を行っているため、補完対象の単語にb、直前の単語にaが渡されていることがわかります。
    2つ目の例ではecho a bと入力し、空白を空けて補完を行っているため、補完対象の単語は空文字列、直前の単語にbが渡されていることがわかります。

    このように補完を行うコマンド行の単語コマンドに渡す必要がなければ、補完動作のコマンドの後に:(ヌルコマンド)を指定します。
    complete -C 'printf "blue\nred\nyellow";:' echo
    $ echoTabTab
    blue    red     yellow
    
    上記の例では補完する位置や単語に関係なく固定的に候補として"blue"、"red"、"yellow"を出力します。
  • -X フィルタパターン
    他のオプションによる補完動作の結果の補完候補リストから指定されたパス名展開のパターンにマッチするものを除外します。
    $ touch file{01,02,03,04,05,06,07,08,09,10}{.txt,.doc}
    $ ls
    file01.doc  file03.doc  file05.doc  file07.doc  file09.doc
    file01.txt  file03.txt  file05.txt  file07.txt  file09.txt
    file02.doc  file04.doc  file06.doc  file08.doc  file10.doc
    file02.txt  file04.txt  file06.txt  file08.txt  file10.txt
    $ complete -f -X '*.txt' echo
    $ echoTabTab
    file01.doc  file03.doc  file05.doc  file07.doc  file09.doc
    file02.doc  file04.doc  file06.doc  file08.doc  file10.doc
    $ echo file
    
    上記の例ではechoの補完候補のファイルのリストから'*.txt'を除外しています。
  • -P プレフィックス
    他のオプションによる補完動作の結果のそれぞれの補完候補に接頭辞としてプレフィックスを付加します。
    $ touch file{01,02,03,04,05,06,07,08,09,10}{.txt,.doc}
    $ ls
    file01.doc  file03.doc  file05.doc  file07.doc  file09.doc
    file01.txt  file03.txt  file05.txt  file07.txt  file09.txt
    file02.doc  file04.doc  file06.doc  file08.doc  file10.doc
    file02.txt  file04.txt  file06.txt  file08.txt  file10.txt
    $ complete -f -P 'new_' echo
    $ echoTabTab
    new_file01.doc  new_file03.txt  new_file06.doc  new_file08.txt
    new_file01.txt  new_file04.doc  new_file06.txt  new_file09.doc
    new_file02.doc  new_file04.txt  new_file07.doc  new_file09.txt
    new_file02.txt  new_file05.doc  new_file07.txt  new_file10.doc
    new_file03.doc  new_file05.txt  new_file08.doc  new_file10.txt
    $ echo file
    
    上記の例ではechoの補完候補のファイル名に'new_'を付加しています。
  • -S サフィックス
    他のオプションによる補完動作の結果のそれぞれの補完候補に接尾辞としてサフィックスを付加します。
    $ touch file{01,02,03,04,05,06,07,08,09,10}
    $ ls
    file01	file02	file03	file04	file05	file06	file07	file08	file09	file10
    $ complete -f -S '.txt' echo
    $ echoTabTab
    file01.txt  file03.txt  file05.txt  file07.txt  file09.txt  
    file02.txt  file04.txt  file06.txt  file08.txt  file10.txt  
    $ echo file
    
    上記の例ではechoの補完候補のファイル名に'new_'を付加しています。

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • -pと-r以外のオプションで名前が指定されなかった場合
  • 存在しない名前の補完動作を削除しようとした場合
  • 補完動作の指定の追加に失敗した場合
compopt compopt [-o オプション] [-DE] [+o オプション] [名前]

指定された名前に対する補完オプションを変更します。
オプションが指定されなかった場合、指定された名前の補完オプションを表示します。
名前が指定されなかった場合、実行中の補完の補完オプションを変更します。
名前もオプションも指定されなかった場合、実行中の補完の補完オプションを表示します。
指定できるオプションはcompleteコマンドの-oオプションで設定できる補完オプションとなります。
  • -D
    補完動作が定義されていないコマンドに対するデフォルトの補完オプションを指定します。
  • -E
    空のコマンド(空行)に対する補完オプションを指定します。
以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • 補完動作が指定されていない名前の補完オプションを変更しようとした場合
  • 出力に失敗した場合
continue continue [n]

forwhileuntilselectループの次の繰り返し分から実行を継続します。
1以上の整数値が引き数nとして指定された場合、その数の深さ分外側のループの次の繰り返し分から実行を継続します。指定された数が実際のループの深さよりも大きな値の場合、一番外側のループの次の繰り返し分から実行を継続します。
nが1未満の値の場合以外は、終了ステータスとして0を返します。
$ for i in 0 1 2; dofor j in 0 1 2 3 4 5 6 7 8 9; dofor k in 0 1 2 3 4 5 6 7 8 9; doif [[ $k -eq 3 ]]; then continue 3; else echo $i$j$k; fi;done; done; done
000
001
002
100
101
102
200
201
202
上記の例はcontinue 3の代わりにbreak 2としても同じ結果となります。
coproc 詳細はコプロセスを参照してください。
指定されたコマンドを非同期で実行し、実行されたコマンドと実行したシェルの間に双方向のパイプを生成して標準入出力を介してデータのやりとりが可能となります。
パイプとして生成された標準入出力ファイルディスクリプタ配列変数に設定されます。
declare
typeset
declare [-aAfFgilrtux] [-p] [名前[=] ...]
typeset [-aAfFgilrtux] [-p] [名前[=] ...]

変数を宣言し、属性(と値)を設定します。
名前が指定されなかった場合、設定されている変数とその値、および関数を出力します。
名前に続けて=値が指定されている場合、その変数に値が代入されます。

aとrのオプションを除いて、"-"の代わりに"+"をオプションに指定することで属性を削除することができます。
declare関数の中で実行した場合、-gオプションが指定されていなければ、指定された変数localで定義された時と同じようにその関数内でのみ有効なローカル変数となります。
名前もオプションも指定されなかった場合、全ての変数の属性と値、および関数を出力します。
  • -a
    名前が指定されなかった場合、出力対象を配列変数とします。
    名前が指定された場合、指定された名前を持つ配列変数を定義します。
  • -A
    名前が指定されなかった場合、出力対象を連想配列とします。
    名前が指定された場合、指定された名前を持つ連想配列を定義します。
  • -f
    名前が指定されなかった場合、出力対象を関数のみとします。
    名前が指定された場合、指定された名前を持つ関数を出力します。
    -tオプションと共に関数名を指定すると指定された関数はDEBUGとRETURNのトラップを継承します。
  • -F
    出力対象を関数のみとし、関数の名前と属性のみを出力します。
    extdebugが有効化されている場合、関数名を指定すると関数定義が行われたソースファイルと行番号も出力されます。
  • -g
    declareコマンドが関数の中で呼び出された場合でもグローバルスコープ(関数の中のローカルスコープではなく、関数を呼び出した元のシェルのスコープ)で変数が定義されます。このため、関数の実行後も変数を操作できます。
    -xオプションと共に指定することもできます。その場合、変数関数の呼び出し後も環境変数として属性を持ちます。
  • -i
    名前が指定されなかった場合、出力対象を整数属性を持つ変数とします。
    名前が指定された場合、指定された名前を持つ整数属性の変数を定義します。この変数に値を代入する際、算術式評価が行われます。
  • -l
    名前が指定されなかった場合、出力対象を文字列型の小文字属性(値を英小文字に変換する)を持つ変数とします。
    名前が指定された場合、指定された名前で小文字属性を持つ文字列型の変数を定義します。
  • -r
    名前が指定されなかった場合、出力対象を読み込み専用属性を持つ変数とします。
    名前が指定された場合、指定された名前で読み込み専用属性を持つ変数を定義します。
    読み込み専用属性を持つ変数は値を代入したり、unsetすることができません。
  • -t
    -fオプションと共に関数名を指定すると指定された関数はDEBUGとRETURNのトラップを継承します。
    例として下記のようなtrace.shを作成します。
    #!/usr/bin/bash
    
    trap 'echo "return to ${FUNCNAME[1]}"' RETURN
    
    function sub {
        echo "enter into sub";
        return;
    }
    
    declare -ft sub
    sub;
    
    実行例:
    $ ./trace.sh 
    enter into sub
    return to main
    
    -tオプションは変数には意味を持ちません。
  • -u
    名前が指定されなかった場合、出力対象を文字列型の大文字属性(値を英大文字に変換する)を持つ変数とします。
    名前が指定された場合、指定された名前で大文字属性を持つ文字列型の変数を定義します。
  • -x
    名前が指定されなかった場合、出力対象をエクスポート属性を持つ環境変数とします。
    名前が指定された場合、指定された名前でエクスポート属性を持つ環境変数を定義します。
  • -p
    名前が指定された場合、他のオプションは無視され、指定された名前の変数の属性と値が表示されます。
    名前が指定されなかった場合、他のオプションで指定された属性を持っている全ての変数の属性と値、または関数を出力します。

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • -fオプションを指定して関数を定義しようとした場合
  • -fオプションを指定して存在しない関数を出力しようとした場合
  • 読み込み専用の属性が設定されている変数に値を代入しようとした場合
  • 読み込み専用の属性が設定されている変数の読み込み専用属性を無効にしようとした場合
  • 複合代入構文を使わずに配列変数に値を代入しようとした場合
  • 定義されていない変数の属性や値を出力しようとした場合
  • 配列変数の配列属性を無効にしようとした場合
dirs dirs [+n] [-n] [-clpv]

現在記憶されているディレクトリスタックを表示します。
オプションが何も指定されなかった場合、現在記憶されている全てのディレクトリスタックを空白で区切って1行で表示します。
以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • 指定されたnの値がディレクトリスタックのインデックスの範囲を超えている場合
disown disown [-ar] [-h] [ジョブの指定 ...]

現在のシェルから指定されたジョブを削除します。これによりフォアグラウンドのシェルを終了させても影響を受けなくすることが可能です。
ジョブの指定がされなかった場合、シェルが記憶しているカレントジョブを削除します。
  • -a
    全てのジョブを対象とします。
  • -r
    実行中のジョブを対象とします。
  • -h
    指定されたジョブを削除せずにシェルがSIGHUPを受信してもそのジョブSIGHUPを送信しないようにします。
ジョブの指定が無効な場合を除いて終了ステータスとして0を返します。
echo echo [-neE] [引き数 ...]

引き数を空白文字で区切って標準出力に出力します。-nオプションが指定された場合を除いて最後に改行文字が付加されます。
  • -n
    行末に改行文字を付加しないようにします。
  • -e
    以下に示すエスケープ文字を解釈できるようにします。
    バックスラッシュ
    エスケープシーケンス
    デコードされる文字
    \a警告(ベル)
    \bバックスペース
    \c行末に改行文字を付加しない
    \e
    \E
    制御文字のエスケープ文字(\x1b)
    \fフォームフィード
    \n改行文字
    \r復帰(Carriage Return)
    \t水平タブ
    \v垂直タブ
    \\バックスラッシュ
    \<nnn>8進数値が<nnn>である8ビット文字
    \x<HH>16進数値が<HH>である8ビット文字
    \u<HHHH>16進数値が<HHHH>であるユニコード(ISO/IEC 10646)文字
    \U<HHHHHHHH>16進数値が<HHHHHHHH>であるユニコード(ISO/IEC 10646)文字
  • -E
    エスケープ文字を解釈せずにそのまま出力するようにします。
xpg_echoによってエスケープ文字を解釈するかどうかのデフォルトの動作を設定できます。
enable enable [-a] [-dnps] [-f ファイル名] [組み込みコマンド ...]

指定された組み込みコマンドを有効化、または無効化します。
組み込みコマンドと同名の外部コマンドが存在する場合、シェルは通常、組み込みコマンドを優先的に実行します。
組み込みコマンドを無効化すると同名の外部コマンドをフルパスで指定しなくても実行出来るようになります。
以下の場合を除いて終了ステータスとして0を返します。
eval eval [引き数 ...]

指定された引き数を評価後に結合して、現在のシェルで一つのコマンドとして実行します。
これにより変数を展開してから、コマンドを動的に実行することも可能です。
終了ステータスとして実行したコマンド終了ステータスを返します。
$ cmd=date; arg="+'%Y/%m/%d %H:%M:%S'"; eval $cmd $arg
2021/12/30 19:21:12
$ var=SHELL; eval echo \$$var
/bin/bash
引数が指定されなかった場合と評価の結果、空文字列となった場合、終了ステータスとして0を返します。
exec exec [-cl] [-a 名前] [コマンド [引き数 ...]]

指定されたコマンドを新しいプロセスを生成せずに、現在のシェルの代わりに(現在のシェルを置換して)実行します。
指定された引き数はコマンドに対する引き数となります。
  • -c
    指定されたコマンドを空の環境で実行します。これによって現在のシェルで設定されている全ての変数オプションなどが空(デフォルト)の状態で実行されます。
  • -l
    login(1)が行うようにコマンドに渡す0番目の引き数の先頭に-を設定します。
    $ exec -l bash
    $ echo $0
    -bash
    
  • -a 名前
    コマンドに渡す0番目の引き数として名前を設定します。
    exec -a sh bash
    sh-4.2$ 
    
非対話型のシェルでexecを実行する場合、何らかの理由でコマンドの実行ができないと、その非対話型のシェルは終了します。
ただし、execfailが有効化されている場合、非対話型のシェルは終了せずに終了ステータスとして0以外を返します。
対話型のシェルでexecを実行する場合、何らかの理由でコマンドの実行ができないと、終了ステータスとして0以外を返します。

コマンドが指定されておらず、リダイレクションが指定されている場合、現在のシェルに対してリダイレクションが適用されます。その場合、終了ステータスとして0を返します。
リダイレクションでエラーが発生した場合、終了ステータスとして1を返します。
exit exit [n]

指定された終了ステータスで現在のシェルを終了します。
EXITに対するトラップが指定されている場合、シェルが終了する前に実行されます。
export export [-pfn] [名前[=単語 ...]]

指定された変数、または関数エクスポートします。
エクスポートされた変数、および関数は現在のシェルから起動される子プロセス内で参照が可能となります。
名前に続けて=と単語を指定した場合、指定された名前の変数の値として指定された単語を代入します。
  • -p
    現在のシェルでエクスポートされている全ての変数を出力します。
    他のオプションや引き数と同時に指定することはできません。(-pオプションのみ指定して使用します。)
  • -f 
    指定された名前の関数にエクスポート属性を付加します。
  • -n 
    指定された名前の変数のエクスポート属性を削除します。
    -fオプションと同時に指定された場合、指定された名前の関数のエクスポート属性を削除します。
以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • 識別子として不正な名前が指定された場合
  • -fオプションに関数名ではない名前が指定された場合
false false

終了ステータスとして偽を示す1を返します。
fc fc [-e エディタ] [-lnr] [開始位置] [終了位置]
fc -s [置換対象文字列=文字列 ...] [コマンド]
fc -e - [置換対象文字列=文字列 ...] [コマンド]|[位置]

1つ目の形式では-lオプションが指定された場合、任意の範囲のコマンドの履歴リストを表示し、-lオプションが指定されていない場合、コマンドの履歴を編集し、編集後のコマンドを実行します。
  • -e エディタ
    エディタが指定されていない場合、FCEDITに設定されているエディタが使用されます。FCEDITも設定されていない場合、EDITORに設定されているエディタが使用されます。いずれの値も設定されていない場合、viがエディタとして使用されます。
  • -l
    コマンドの履歴リストを表示します。
    -lオプションが指定されていない場合、開始位置から終了位置までのコマンドの履歴を指定されたエディタで編集します。
  • -n
    履歴リストを表示する時、インデックス番号が表示されません。
  • -r
    履歴リストの表示順が逆順となります。
    デフォルトでは古い履歴から新しい履歴の順に表示されます。
  • 開始位置
    文字列か整数で指定します。文字列が指定された場合、その文字列で始まる直近のコマンドを開始位置とします。
    整数が指定された場合、履歴リスト中でのインデックス番号で参照されるコマンドを開始位置とします。負の値が指定された場合、履歴リストの最後のコマンドからのオフセットとして見做されます。
    開始位置が指定されていない場合、履歴のリストを表示する時には-16が指定されたものと見做され、編集する時は履歴リストの最後のコマンドが開始位置(および終了位置)と見做されます。
  • 終了位置
    文字列か整数で指定します。文字列が指定された場合、その文字列で始まる直近のコマンドを終了位置とします。
    整数が指定された場合、履歴リスト中でのインデックス番号で参照されるコマンドを終了位置とします。負の値が指定された場合、履歴リストの最後のコマンドからのオフセットとして見做されます。
    終了位置が指定されていない場合、履歴のリストを表示する時には履歴リストの最後のコマンドが終了位置と見做され、編集する時は開始位置が終了位置と見做されます。
2つ目、および3つ目の形式ではコマンドの履歴から指定された置換対象文字列を任意の文字列に置換してコマンドを実行します。
3つ目の形式の場合、コマンド、またはコマンドの履歴のインデックス番号が指定できます。
  • -s
    fcを2つ目の形式で実行することを指定します。
  • 置換対象文字列=文字列
    コマンドの履歴にあるコマンドの任意の文字列を別の文字列に置換します。
    複数指定することができます。
    $ echo "Hello World"
    Hello World
    $ fc -s Hello="Welcome to the" echo=printf World="World\n" echo
    printf "Welcome to the World\n"
    Welcome to the World
    
  • コマンド
    その文字列で始まる直近のコマンドが対象となります。
  • 位置
    文字列か整数で指定します。文字列が指定された場合、その文字列で始まる直近のコマンドが対象となります。
    整数が指定された場合、履歴リスト中でのインデックス番号で参照されるコマンドが対象となります。負の値が指定された場合、履歴リストの最後のコマンドからのオフセットとして見做されます。
終了ステータスは以下の通りとなります。
1つ目の形式では、以下の場合を除いて0を返します。
  • 不正なオプションが指定された場合
  • 開始位置、または終了位置が履歴リストの範囲外の値が指定された場合
  • -fオプションに関数名ではない名前が指定された場合
  • コマン>ドの一時ファイルでエラーが発生した場合
  • -eオプションが指定された場合
    最後に実行されたコマンド終了ステータスを返します。
2つ目、および3つ目の形式では最後に実行されたコマンド終了ステータスを返します。
ただし、コマンドの履歴にない無効なコマンドを再実行しようとした場合は0以外を返します。
fg fg [ジョブの指定 ...]

ジョブの指定で指定されたジョブの実行をフォアグラウンドで再開し、カレントジョブとします。

ジョブの指定がされなかった場合、シェルが記憶しているカレントジョブ(フォアグラウンドで実行中に停止させられたジョブ、またはバックグラウンドで起動された最後のジョブ)をフォアグラウンドで実行再開します。
終了ステータスとしてフォアグラウンドで実行再開されたコマンド終了ステータスを返します。
ジョブ制御が無効な場合やジョブの指定が有効ではない場合、終了ステータスとして0以外を返します。
for 詳細は複合コマンドfor、およびforを参照してください。
do - doneで囲まれたコマンドを繰り返し実行します。
function 詳細は関数を参照してください。
関数を定義します。
getopts getopts オプション文字列 変数名 [引き数 ...]

位置パラメータを解釈し、与えられたオプションを処理します。
引き数が指定された場合、位置パラメータではなく、与えられた引き数を解釈し、与えられたオプションを処理します。

オプション文字列は解釈の対象となるオプションの文字を続けて指定します。(例えば、-aオプションと-bオプションの場合、ab)
オプションが引き数を持つ場合、オプションの文字に続けて:を記述します。(例えば、-aオプションが引き数を持つ場合、a:)
各オプションに指定できる引き数は1つまでとなり、オプション文字と引き数は空白文字で区切って指定する必要があります。
:と?はオプション文字として使用することはできません。

getoptsは呼び出されるたびに見つかったオプションの文字を指定された変数に設定し、次に処理する引き数のインデックスをOPTINDに設定します。
OPTINDはシェル(またはシェルスクリプト)が起動されるたびに1に初期化されます。
(シェルは起動時にOPTINDに初期化する以外では、その値を初期化することはありません。このため、同じシェルの中で別の位置パラメータを解釈するために、再びgetoptsを呼び出す場合、OPTINDを1に再設定する必要があります。)
オプションが引き数を持つ場合、その引き数をOPTARGに設定します。

オプション文字列にない不正なオプションが指定された場合、および引き数を持つオプションに引き数が指定されなかった場合、getoptsはエラーメッセージを標準エラー出力に出力し、指定された変数に?を設定し、OPTARGを削除します。
オプション文字列の最初の文字に:が指定されるか、OPTERRに0が設定されていると、不正なオプションやオプションに対する引数がない場合でもエラーメッセージが出力されません。また、OPTARGに見つかったオプション文字が設定されます。オプションに対する引数がない場合、指定された変数に:を設定し、OPTARGに見つかったオプション文字が設定されます。

オプション文字列に指定されたオプションが見つかった場合、終了ステータスとして0を返します。
オプションの解釈がすべて終了するとオプションではない最初の引き数のインデックスがOPTINDに設定され、指定された変数に?が設定され、終了ステータスとして0より大きい値を返します。

実行例はオプションのチェックを参照してください。
hash hash [-lr] [-p ファイルのパス] [-dt] [コマンド ...]

組み込みではないコマンドPATHから検索し、見つかったフルパスをハッシュテーブルとして記憶します。
オプションもコマンドも指定されなかった場合、ハッシュテーブルに記憶されているコマンドとフルパスを標準出力に出力します。
  • -l
    ハッシュテーブルに記憶されているコマンドとフルパスを再利用可能な形式で標準出力に出力します。
  • -r
    ハッシュテーブルに記憶されているコマンドとフルパスを全て消去します。
  • -p ファイルのパス
    PATHからコマンドを検索せず、指定されたファイルのパスをコマンドのパスとして記憶します。
  • -d
    ハッシュテーブルに記憶されている指定されたコマンドとそのフルパスを消去します。
  • -t
    ハッシュテーブルに記憶されている指定されたコマンドのフルパスを標準出力に出力します。
    複数のコマンドが指定された場合、各コマンドとフルパスを標準出力に出力します。
以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • 指定されたコマンドPATHから見つからなかった場合
help help [-dms] [パターン]

指定されたパターンに前方一致する組み込みコマンドのヘルプを表示します。
パターンが指定されなかった場合、全ての組み込みコマンドの概要を表示します。

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • 指定されたパターンにマッチする組み込みコマンドがなかった場合
history history [行数]
history -c
history -d オフセット
history -anrw [ファイル名]
history -p 引き数 [引き数 ...]
history -s 文字列

コマンドの履歴を表示、または操作します。
オプションが指定されなかった場合、行番号付きでコマンドの履歴を表示します。
ファイル名が指定されている場合、指定されたファイルを履歴ファイルとして使用します。指定されていない場合、HISTFILEの値が履歴ファイルとして使用されます。
  • 行数
    最新の履歴から指定された行数分遡って履歴を表示します。
  • -d オフセット
    指定されたオフセット(履歴エントリの位置)の履歴エントリを削除します。
    $ echo Hello
    Hello
    $ echo Hello World
    Hello World
    $ echo 'Hello World!!'
    Hello World!!
    $ history
        1  echo Hello
        2  echo Hello World
        3  echo 'Hello World!!'
        4  history
    $ history -d 2
    $ history
        1  echo Hello
        2  echo 'Hello World!!'
        3  history
        4  history -d 2
        5  history
    
  • -a
    bashの現在のセッションの開始以降のコマンドの履歴を履歴ファイルに書き込みます。
  • -n
    bashの現在のセッションの開始以降に履歴ファイルに書き込まれた履歴エントリを(メモリ上の)履歴リストに読み込みます。
  • -r
    履歴ファイルの内容をすべて(メモリ上の)履歴リストに読み込みます。
  • -w
    現在のメモリ上にある履歴リストを履歴ファイルに書き込みます。履歴ファイルの内容は上書きされます。
  • -p 引き数 [引き数 ...]
    引き数として指定された文字列を履歴展開し、その結果を標準出力に出力(出力されるのみで、コマンド行として編集できません。)します。
    指定する引き数はbashが入力行の展開を行わないようにクォートする必要があります。
    このコマンドは履歴として記録されません。
    echo Hello World
    Hello World
    $ history -p '!!'
    echo Hello World
    $ history -p '^Hello^Welcome to the^'
    echo Welcome to the World
    
  • -s 文字列
    指定された文字列を1つの履歴エントリとして履歴リストに記録します。
    このコマンドは履歴として記録されません。
    echo Hello World
    Hello World
    $ echo Welcome to the World
    Welcome to the  orld
    $ history -s echo Hello Hello
    $ history 
        1  echo Hello World
        2  echo Welcome to the World
        3  echo Hello Hello
        4  history
    
表示された履歴に*印が付いているものは編集された履歴であることを示しています。
HISTTIMEFORMATに空文字列以外が設定されている場合、履歴のエントリに指定された書式のタイムスタンプが付加されます。
タイムスタンプと履歴エントリの間に自動的に空白は付加されません。
履歴エントリのタイムスタンプの情報は履歴のコメント文字を付加して履歴ファイルに書き込まれます。シェルは履歴ファイルを読み込む時、履歴のコメント文字で始まり、続けて数字が続く行は直前の履歴業のタイムスタンプとして解釈されます。

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • -dオプションの引き数として不正なオフセットが指定された場合
  • -pオプションの引き数として指定された履歴展開が失敗した場合
  • 履歴ファイルの読み込み、または書き込みでエラーが発生した場合
if 詳細は複合コマンドifを参照してください。
指定された条件に従ってコマンドを実行します。
jobs jobs [-lnprs] [ジョブの指定 ...]
jobs -x コマンド [引き数 ...]

1つ目の形式では、アクティブなジョブについて表示します。
  • -l
    プロセスIDを表示します。
  • -n
    ユーザーにジョブのステータスが最後に通知された以降にステータスに変更があったジョブのみを対象として表示します。
  • -p
    そのジョブが属するプロセスグループのリーダーのプロセスIDのみを表示します。
  • -r
    実行中のジョブのみを対象として表示します。
  • -s
    停止中のジョブのみを対象として表示します。
ジョブの指定が指定された場合、指定されたジョブのみを対象として表示します。

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • 不正なジョブの指定が指定された場合

2つ目の形式では、コマンドと引き数の文字列中のジョブの指定をそのジョブのプロセスのグループIDに置換し、コマンドを引き数付きで実行します。
終了ステータスとして実行されたコマンド終了ステータスを返します。
$ sleep 100&
[1] 1033
$ sleep 200&
[2] 1034
$ sleep 300&
[3] 1035
$ jobs
[1]   実行中               sleep 100 &
[2]-  実行中               sleep 200 &
[3]+  実行中               sleep 300 &
$ jobs -x ps -p %?200
  PID TTY          TIME CMD
 1034 pts/1    00:00:00 sleep
kill kill [-シグナルの指定 | -s シグナルの指定 | -n シグナル番号] [プロセスID | ジョブの指定] ...
kill -l [シグナルの指定 | 終了ステータス]

1つ目の形式では、シグナルの指定、またはシグナル番号で指定されたシグナルをプロセスID、またはジョブの指定で指定されたプロセスに送信します。
シグナルの指定もシグナル番号のいずれも指定されなかった場合、SIGTERMが指定されたものと見做されます。

2つ目の形式では、任意のシグナルを指定すると、そのシグナル番号を表示します。シグナルを受信したことによって終了したプロセスの終了ステータスシグナル番号 + 128)を指定すると送信されたシグナルを表示します。

シグナルの指定は以下のいずれかの方法で記述します。
$ sleep 200&
[1] 4021
$ sleep 200&
[2] 4022
$ kill -SIGTERM %1
[1]-  Terminated              sleep 200
$ kill -s TERM %2
[2]+  Terminated              sleep 200

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • 1つ目の形式でシグナルが1つも正常に送信されなかった場合
let 式
(())
詳細は複合コマンド(())を参照してください。
指定された式を算術式評価します。
local local [-aAfFgilrtux] [-p] [名前[=] ...]

関数内とその関数から呼び出される子の関数内でのみ有効となるローカルな変数を宣言します。
スコープ関数内であるということを除けば、declareと同じように変数を宣言し、属性(と値)を設定します。指定できるオプションはdeclareと同じであるため、詳細についてはdeclareを参照してください。
名前も他のオプションも指定されなかった場合、全てのローカルな変数の属性と値、および関数を出力します。
function func () { local -i i=123; local -a arr=(x, y, z); local -p; }
$ func
arr=([0]="x," [1]="y," [2]="z")
i=123

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションが指定された場合
  • -fオプションを指定して関数を定義しようとした場合
  • -fオプションを指定して存在しない関数を出力しようとした場合
  • 読み込み専用の属性が設定されている変数に値を代入しようとした場合
  • 読み込み専用の属性が設定されている変数の読み込み専用属性を無効にしようとした場合
  • 複合代入構文を使わずに配列変数に値を代入しようとした場合
  • 定義されていない変数の属性や値を出力しようとした場合
  • 配列変数の配列属性を無効にしようとした場合
  • 関数外で呼び出された場合
logout ログインシェルを終了します。
mapfile
readarray
mapfile [-n 行数] [-O インデックス] [-s 行数] [-t] [-u ファイルディスクリプタ] [-C コマンド] [-c 行数] [配列変数]
readarray [-n 行数] [-O インデックス] [-s 行数] [-t] [-u ファイルディスクリプタ] [-C コマンド] [-c 行数] [配列変数]

標準入力から行を読み込み1行ごとに指定された配列変数の要素に代入します。
  • -n 行数
    読み込む最大の行数を指定します。
    指定されなかった場合、または0が指定された場合、全ての行数が読み込まれます。
  • -O インデックス
    読み込んだ行を配列変数の指定されたインデックス以降に代入します。
    指定されなかった場合、配列変数を初期化し、先頭の要素0から代入されます。
  • -s 行数
    指定された最初の行数分をスキップし、その次の行から配列変数へ代入します。
  • -t
    読み込んだ行の末尾にある改行文字を削除して配列変数へ代入します。
  • -u ファイルディスクリプタ
    標準入力からではなく、指定されたファイルディスクリプタから行を読み込みます。
  • -C コマンド
    -cで指定された行数を読み込むごとにコマンドを実行します。
    関数を指定することもできます。
    指定されたコマンドを実行する時、位置パラメータの$1に読み込まれた行番号、$2に読み込んだ行の内容が設定されます。
    指定されたコマンドは行が読み込まれてから配列変数へ代入する前に実行されます。
  • -c 行数
    指定された行数を読み込むごとに-Cで指定されたコマンドを実行します。
    指定されなかった場合、5000行がデフォルトの行数となります。
    指定された行数を読み込む前にEOF(ファイルの終端)を検知した場合、コマンドは実行されません。
  • 配列変数
    読み込んだ行を代入する配列変数名を指定します。
    指定されなかった場合、MAPFILEの値の配列変数に代入されます。
$ cat /etc/networks 
default 0.0.0.0
loopback 127.0.0.0
link-local 169.254.0.0
$ function cb () { printf "%02d: %s\n" "$1" "$2"; }mapfile -t -C cb -c 1 LINES < /etc/networks 
00: default 0.0.0.0
01: loopback 127.0.0.0
02: link-local 169.254.0.0
$ for ((i=0; i<${#LINES[@]}; i++)) do echo ${LINES[$i]}; done
default 0.0.0.0
loopback 127.0.0.0
link-local 169.254.0.0

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションや引き数が指定された場合
  • 指定された配列変数名が不正か、値を代入できない場合
  • 指定された配列変数名が配列変数でない場合
popd popd [-n] [+n] [-n]

ディレクトリスタックからディレクトリのエントリを削除します。
引き数が指定されなかった場合、スタックの先頭にあるエントリが削除され、新しくスタックの先頭となったディレクトリカレントディレクトリを移動します。
cd dir1
$ pushd ../dir2
~/dir2 ~/dir1
$ pushd ../dir3
~/dir3 ~/dir2 ~/dir1
$ dirs -v
 0  ~/dir3
 1  ~/dir2
 2  ~/dir1
$ popd
~/dir2 ~/dir1
$ pwd
/home/user1/dir2
popdが正常に実行された場合、dirsも実行されます。
以下の場合を除いて終了ステータスとして0を返します。
printf printf [-v 変数書式指定 [引き数]

引き数を整形して標準出力に出力します。
-vオプションが指定された場合、標準出力ではなく、指定された変数に整形された文字列を代入します。

書式指定は以下の3種類の文字列で構成されます。
  • 通常の文字
    指定された文字列が展開されてそのまま出力されます。
  • バックスラッシュによるエスケープシーケンス
    以下のエスケープ文字がデコードされて出力されます。
    バックスラッシュ
    エスケープシーケンス
    デコードされる文字
    \a警告(ベル)
    \bバックスペース
    \e
    \E
    制御文字のエスケープ文字(\x1b)
    \fフォームフィード
    \n改行文字
    \r復帰(Carriage Return)
    \t水平タブ
    \v垂直タブ
    \\バックスラッシュ
    \<nnn>8進数値が<nnn>である8ビット文字
    \x<HH>16進数値が<HH>である8ビット文字
    \u<HHHH>16進数値が<HHHH>であるユニコード(ISO/IEC 10646)文字
    \U<HHHHHHHH>16進数値が<HHHHHHHH>であるユニコード(ISO/IEC 10646)文字
  • 表示フォーマットの指定
    以下の書式で引き数の出力形式を指定します。
    %[フラグ][フィールド幅][精度][l修飾][変換文字]
    フラグ説明
    -フィールド幅を指定した場合で出力結果が指定した幅より短い場合、出力データを左詰めし、右側を空白で埋めて出力します。
    printf "[%-15s\n]" "Hello World"
    [Hello World    ]
    $ printf "[%-8d]\n" 12345 12345
    [12345   ]
    [12345   ]
    
    +数値を出力する場合、数値の前に符号を出力します。
    printf "[%+8d]\n" 12345 -123 0 123456789
    [  +12345]
    [    -123]
    [      +0]
    [+123456789]
    $ printf "[%+12f]\n" 12345 -123 0 1.234
    [+12345.000000]
    [ -123.000000]
    [   +0.000000]
    [   +1.234000]
    
    空白数値を出力する場合、正の数は数値の前に空白を付加して出力し、負の数は数値の前に-を付加して出力します。
    printf "[% 8d]\n" 12345 -123 0 123456789
    [   12345]
    [    -123]
    [       0]
    [ 123456789]
    $ printf "[% 12f]\n" 12345 -123 0 1.234
    [ 12345.000000]
    [ -123.000000]
    [    0.000000]
    [    1.234000]
    
    0フィールド幅を指定した数値を出力する場合、桁数に合わせて数値の前を0で埋めて出力します。
    printf "[%08d]\n" 12345 -123 0 123456789
    [00012345]
    [-0000123]
    [00000000]
    [123456789]
    $ printf "[%012f]\n" 12345 -123 0 1.234
    [12345.000000]
    [-0123.000000]
    [00000.000000]
    [00001.234000]
    
    #数値を出力する場合、変換文字に合わせて先頭に0(8進数)や0x(16進数)を付加して出力します。
    printf "[%#8x]\n" 128 65535
    [    0x80]
    [  0xffff]
    $ printf "[%#8o]\n" 128 65535
    [    0200]
    [ 0177777]
    
    フィールド幅説明
    整数値出力する桁数・文字数を指定します。
    出力データが指定した幅より短い場合、デフォルトでは右詰めで出力します。
    出力データが指定した幅より長い場合、出力データの幅で出力されます。
    数値の符号や小数点も幅としてカウントされます。
    *フィールド幅を引き数で指定します。
    出力データの引き数が複数ある場合、各引き数ごとにフィールド幅を指定します。
    printf "[%*d]\n" 6 123 8 1234 
    [   123]
    [    1234]
    $ printf "[%*s]\n" 15 "Hello World" 8 "Hello""
    [    Hello World]
    [   Hello]
    
    精度説明
    .整数値d, i, u, o, x, X少なくとも指定された桁数を出力します。
    printf "[%8.5d]\n" 123 12345 12345678 123456789
    [   00123]
    [   12345]
    [12345678]
    [123456789]
    $ printf "[%#8.6x]\n" 128 65535 131072
    [0x000080]
    [0x00ffff]
    [0x020000]
    
    e, E, f指定された桁数の小数点以下の桁数を出力します。
    printf "[%8.6f]\n" 1.2345 1.2345678 1.0
    [1.234500]
    [1.234568]
    [1.000000]
    $ printf "[%8.6e]\n" 12345678901234 1.2345678 12345.6789
    [1.234568e+13]
    [1.234568e+00]
    [1.234568e+04]
    
    g, G有効桁数を指定します。
    出力データが指定した有効桁数以上の場合、切り捨てられます。
    printf "[%8.6g]\n" 12345678901234 1.2345678 12345.6789
    [1.23457e+13]
    [ 1.23457]
    [ 12345.7]
    
    s最大文字数を指定します。
    出力データが指定した最大文字数以上の場合、切り捨てられます。
    printf "[%.5s]\n" "Hello World" "Good Morning"
    [Hello]
    [Good ]
    $ printf "[%3.5s]\n" "Hello World" "Good Morning"
    [Hello]
    [Good ]
    $ printf "[%10.5s]\n" "Hello World" "Good Morning"
    [     Hello]
    [     Good ]
    
    .0小数点以下を出力しないようにします。
    printf "[%8.0e]\n" 12345678901234 1.2345678 1.0
    [   1e+13]
    [   1e+00]
    [   1e+00]
    $ printf "[%8.0f]\n" 12345678901234 1.2345678 1.0
    [12345678901234]
    [       1]
    [       1]
    
    .*精度を引き数で指定します。
    出力データの引き数が複数ある場合、各引き数ごとに精度を指定します。
    printf "[%8.*g]\n" 3 12345678901234 4 1.2345678 4 1.0
    [1.23e+13]
    [   1.235]
    [       1]
    $ printf "[%8.*f]\n" 3 12345678901234 4 1.2345678 4 1.0
    [12345678901234.000]
    [  1.2346]
    [  1.0000]
    $ printf "[%8.*e]\n" 3 12345678901234 4 1.2345678 4 1.0
    [1.235e+13]
    [1.2346e+00]
    [1.0000e+00]
    
    l修飾説明
    l数値を倍精度で扱います。
    変換文字説明
    d, i符号付きの整数を10進数表記で出力します。
    u符号無し整数を10進数表記で出力します。
    o符号付きの整数を8進数表記で出力します。
    x, X符号付きの整数を16進数表記で出力します。
    xを指定した場合、英小文字で出力し、Xを指定した場合、英大文字で出力します。
    e, E実数を指数表示(小数点の前は1桁、小数点以下の桁数は指定された精度、精度が指定されていない場合は6桁)で出力します。
    eを指定した場合、英小文字で出力し、Eを指定した場合、英大文字で出力します。
    a, A実数を16進数で指数表示(小数点の前は1桁、小数点以下の桁数は指定された精度、精度が指定されていない場合は6桁、指数部分は10進数表記)で出力します。
    aを指定した場合、英小文字で出力し、Aを指定した場合、英大文字で出力します。
    f実数を指数表示(小数点の前は1桁以上、小数点以下の桁数は指定された精度、精度が指定されていない場合は6桁)で出力します。
    g, G実数を最適な表示(%e/%E、または%f/%F)で出力します。小数点以下の桁数は指定された精度、精度が指定されていない場合は6桁)で出力します。
    %文字としての%を出力します。
    フラグ、フィールド幅、精度の指定はできません。
    c引き数の最初の1文字を出力します。
    printf "%c\n" Hello
    H
    
    s引き数を単純な文字列として出力します。
    $ printf "%s\n" "\'Hello World\'"
    \'Hello World\'
    
    b引き数を文字列として解釈し、エスケープ文字をデコードして出力します。
    フラグ、フィールド幅、精度の指定はできません。
    エスケープ文字に以下の制約があります。
    • 引き数の文字列に\cが現れた場合、それ以降の文字列は出力されません。
    • \'、\"、\?はデコードされず、単純な文字列として出力されます。
    • \0で始まる8進数のエスケープシーケンスは4桁までとなります。
    printf "%b\n" "\'Hello World\'"
    \'Hello World\'
    $ printf "%b" "\'Hello World\'\n"
    \'Hello World\'
    $ printf "%b\n" "Hello\n\c World\n"
    Hello
    $ printf "%b\n" "A=\0101,B=\0102,AB=\01010102"
    A=A,B=B,AB=A0102
    
    q引き数をシェルで再利用できる文字列として出力します。
    printf "%q\n" "A=\0101,B=\0102,AB=\01010102"
    A=\\0101\,B=\\0102\,AB=\\01010102
    $ printf "%q\n" "\'Hello\n\c World\'\n"
    \\\'Hello\\n\\c\ World\\\'\\n
    
    (日付書式)T日付書式をstrftime(3)の書式文字列として解釈し、指定された引き数を日付と時刻の文字列に変換して出力します。
    引き数は1970年1月1日 00:00:00 UTCからの経過秒数を示す整数値を指定する必要があります。
    printf "%(%Y/%m/%d %H:%M:%S)T\n" `date '+%s'`
    2022/05/05 18:56:25
    
    n出力された文字数を指定された変数に代入します。
    printf "%s%n %s%n\n" "Hello" i "World" j
    Hello World
    $ echo $i, $j
    5, 11
    $ printf "%(%Y/%m/%d %H:%M:%S)T%n\n" `date '+%s'` i
    2022/05/05 19:08:12
    $ echo $i
    19
    
文字列ではない書式指定に対する引き数は、C言語の定数として扱われます。
ただし、先頭の+と-の符号は許されます。
また引き数の先頭の文字が'や"であれば、続く文字のASCIIコードの値が引き数の値となります。
printf "%#x%x%x\n" "'a" "'b" "'c"
0x616263
書式指定に対して引き数が多い場合、書式指定が再利用され、全ての引き数に対して同じ書式指定が適用されます。
printf "%d:%d\n" 1 2 3 4 5 6 7 8
1:2
3:4
5:6
7:8
逆に、書式指定に対して引き数が少ない場合、空文字列か0の適切な方が引き数として指定されたように出力されます。
printf "[%d:%d %s %s]\n" 1 2
[1:2  ]
$ printf "[%d:%s %d:%s]\n" 1 abc
[1:abc 0:]

出力が正常に行われた場合、終了ステータスとして0を返します。出力に失敗した場合、0以外を返します。
pushd pushd [-n] [ディレクトリ]
pushd [-n] [+n] [-n]

1つ目の形式では、ディレクトリスタックディレクトリを追加します。

2つ目の形式では、ディレクトリスタックをローテートし、新しくスタックの先頭となったディレクトリカレントディレクトリを移動します。
引き数が指定されなかった場合、スタックの上位2つのエントリを入れ替えます。
cd dir1
$ pushd ../dir2
~/dir2 ~/dir1
$ pushd ../dir3
~/dir3 ~/dir2 ~/dir1
$ dirs -v
 0  ~/dir3
 1  ~/dir2
 2  ~/dir1
$ popd
~/dir2 ~/dir1
$ pwd
/home/user1/dir2
pushdが正常に実行された場合、dirsも実行されます。

以下の場合を除いて終了ステータスとして0を返します。
pwd pwd [-LP]

カレントディレクトリ絶対パスを表示します。
-Pオプションが指定されるか、pyhsicalが有効化されている場合、カレントディレクトリがシンボリックリンクを含むとき、物理ディレクトリを表示します。
-Lオプションが指定された場合、カレントディレクトリがシンボリックリンクを含むとき、論理ディレクトリを表示します。

以下の場合を除いて終了ステータスとして0を返します。
read read [-ers] [-a 配列変数] [-d デリミタ] [-i 文字列] [-n 文字数] [-N 文字数] [-p プロンプト] [-t タイムアウト] [-u ファイルディスクリプタ] [変数 ...]

標準入力、または-uオプションで指定されるファイルディスクリプタからIFS(デフォルトは'<空白文字><タブ文字><改行文字>')で区切られた1行を読み込み、単語ごとに指定された変数に代入します。
単語の数が変数よりも多い場合、最後の変数に残りの単語と区切り文字がすべて代入されます。
逆に単語の数よりも変数が多く指定された場合、残りの変数には空文字列が代入されます。
  • -e
    標準入力から行を読み込む際、readlineを使用します。
  • -r
    入力された行の文字列に\が現れてもエスケープ文字としてではなく、単純な文字の\として扱います。
    \を使用して行を継続することができなくなります。
  • -s
    入力された行の文字列を標準出力にエコーしません。
    このオプションを指定しない場合、入力された文字列は標準出力にエコーされます。
  • -a 配列変数
    入力された行の単語変数ではなく、配列変数へ代入します。
    インデックスは0から始まり、単語ごとにインデックスが増加します。
    このオプションと引き数として配列変数が指定された場合、変数の指定は無視されます。
    以下のスクリプトread.shを作成して確認します。
    #!/usr/bin/bash
    
    while read -a arr; do
        for ((i=0; i<${#arr[@]}; i++)) do
            echo $i: ${arr[$i]};
        done
    done
    
    echo "Welcome to the World" | ./read.sh
    0: Welcome
    1: to
    2: the
    3: World
    
  • -d デリミタ
    1行を読み込むのではなく、デリミタとして指定された文字を読み込みの終わりとします。デリミタとして1文字以上が指定された場合、最初の文字をデリミタとして使用します。
    以下のスクリプトread.shを作成して確認します。
    #!/usr/bin/bash
    
    while read -d " " -a arr; do
        for ((i=0; i<${#arr[@]}; i++)) do
            echo $i: ${arr[$i]};
        done
    done
    
    echo "Welcome to the World" | ./read.sh
    0: Welcome
    0: to
    0: the
    
    デリミタとして空白文字を指定したため、空白文字が現れるたびに読み込みが終了します。このため、配列変数のインデックス0に単語が代入されます。
    最後の単語はデリミタである空白文字が続かないため、読み込まれていません。
    スクリプトread.shを以下のように変更します。
    #!/usr/bin/bash
    
    while read -d ";" -a arr; do
        for ((i=0; i<${#arr[@]}; i++)) do
            echo $i: ${arr[$i]};
        done
    done
    
    echo "Welcome to the World;Hello World;| ./read.sh
    0: Welcome
    1: to
    2: the
    3: World
    0: Hello
    1: World
    
    デリミタとして;を指定したため、;が現れるたびに読み込みが終了します。
    それぞれの単語配列変数の各要素に代入されます。
  • -i 文字列
    -eオプションと共に指定された場合、readlineの編集バッファに指定された文字列が設定されます。
    指定された文字列は読み込まれた文字とともに変数、または配列変数へ代入されます。
    read -i "入力された文字列: " -e var
    入力された文字列: Welcome to the World
    $ echo $var
    入力された文字列: Welcome to the World
    
  • -n 文字数
    指定された文字数を読み込むたびにいったん読み込みを完了させます。
    以下のスクリプトread.shを作成して確認します。
    #!/usr/bin/bash
    
    while read -n 5 -a arr; do
        for ((i=0; i<${#arr[@]}; i++)) do
            echo $i: ${arr[$i]};
        done
    done
    
    echo "Welcome to the World\nHello World" | ./read.sh
    0: Welco
    0: me
    1: to
    0: the
    0: World
    0: Hello
    0: Worl
    0: d
    
  • -N 文字数
    指定された文字数を読み込むたびにいったん読み込みを完了させます。
    EOFを検知するか、-tオプションで指定された時間が経過するまで指定された文字数の読み込みを待ちます。
    単語IFSで区切られず、指定された文字数ごとに変数、または配列変数へ代入されます。
    以下のスクリプトread.shを作成して確認します。
    #!/usr/bin/bash
    
    while read -N 5 -a arr; do
        for ((i=0; i<${#arr[@]}; i++)) do
            echo "[$i: ${arr[$i]}]";
        done
    done
    
    echo "Welcome to the World\nHello World" | ./read.sh
    [0: Welco]
    [0: me to]
    [0:  the ]
    [0: World]
    [0: 
    Hell]
    [0: o Wor]
    
  • -p プロンプト
    標準入力から読み込む場合、読み込みを行う前に指定された文字列をプロンプトとして標準エラー出力に出力します。
    ファイルディスクリプタパイプラインから読み込む場合はプロンプトは出力されません。
  • -t タイムアウト
    指定された時間内に読み込みが完了しない場合、終了ステータスとして128を返しタイムアウトを発生させます。
    時間は秒数で指定します。
    このオプションは端末、パイプライン、および特殊ファイルからの読み込みの場合のみ有効となり、通常ファイルからの読み込みではタイムアウトは発生しません。
  • -u ファイルディスクリプタ
    標準入力ではなく、指定されたファイルディスクリプタから読み込みします。
読み込んだ単語を代入する変数、または配列変数が何も指定されなかった場合、REPLYに代入されます。
読み込み中にファイルの終端(EOF)に到達した場合、およびタイムアウトが発生した場合、終了ステータスとして128を返します。

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションや引き数が指定された場合(-uオプションのファイルディスクリプタが不正な場合を含みます)
  • タイムアウトが発生した場合
  • 読み込み中にファイルの終端(EOF)に到達した場合
readonly readonly [-aAf] [-p] [名前[=] ...]

指定された変数、または関数を読み込み専用とします。
名前もオプションも指定されなかった場合、読み込み専用の属性を持つ全ての変数、または関数を再利用できる形式で出力します。
名前に続けて=値が指定されている場合、その変数に値が代入されます。
  • -a
    配列変数を対象とします。
  • -A
    連想配列変数を対象とします。
    -aと-Aオプションを同時に指定した場合、-Aが優先されます。
  • -f
    関数を対象とします。
  • -p
    読み込み専用の属性を持つ全ての変数、または関数を再利用できる形式で出力します。
    他のオプションを同時に指定すると指定された対象のみを出力します。
以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションや引き数が指定された場合
  • 有効でない変数名が指定された場合
  • -fオプションの引き数に関数以外を指定した場合
return return [n]

関数、またはsourceで読み込まれたスクリプトを指定された終了ステータスで終了します。
nが省略された場合、関数、またはスクリプト内で最後に実行されたコマンド終了ステータスを返します。
関数、またはsourceで読み込まれたスクリプト以外で呼び出された場合、終了ステータスとして0以外を返します。
RETURNに対するトラップが指定されている場合、関数、またはスクリプトが終了する前に実行されます。
select 詳細は複合コマンドselectを参照してください。
指定された文字列のリストを番号付きで表示し、標準入力から読み込んだ内容を変数に設定します。
set 詳細はオプションを参照してください。
シェルのオプション、および位置パラメータを設定、または解除します。
shift shift [n]

指定された数だけ$1以降の位置パラメータをシフトします。
nが省略された場合、1が指定されたものと見做されます。
${n+1}を新たに$1とし、続く位置パラメータを$2、$3...として再設定します。
$0についてはシフトの影響を受けません。
位置パラメータをシフトすると$#の値もシフトした数だけ減少します。

例: $ shift 2

$1

値: 135

$2

値: 267

$3

値: 356

$4

値: 287

$n

値: 181

$1

値: 356

$2

値: 287

$n

値: 181

例として下記のようなスクリプトshift.shを作成します。
#!/usr/bin/bash

echo '$#:' $#
for ((i=0; i<=$#; i++))
do
    echo '$'"$i:" ${!i}
done

echo "shift 2"
shift 2

echo '$#:' $#
for ((i=0; i<=$#; i++))
do
    if [[ $i = 0 ]]; then
        echo '$'"$i:" ${!i}
    else
        echo '$'$((i+2))'>$'"$i:" ${!i}
    fi
done
$ ./shift.sh p1 p2 p3 p4 fin
$#: 5
$0: ./shift.sh
$1: p1
$2: p2
$3: p3
$4: p4
$5: fin
shift 2
$#: 3
$0: ./shift.sh
$3>$1: p3
$4>$2: p4
$5>$3: fin
shopt 詳細はオプションを参照してください。
シェルのオプションを設定、または解除します。
suspend suspend [-f]

SIGCONTを受信するまで、現在のシェルの実行を一時停止します。
-fオプションを指定するとログインシェルを一時停止することができます。それ以外の場合、ログインシェルを一時停止することはできません。
以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションや引き数が指定された場合
  • 現在のシェルがログインシェルの時、-fオプションを指定せずに呼び出された場合
  • ジョブ制御が無効な場合
time 指定されたパイプラインを実行し、パイプラインを実行するために消費した時間、ユーザー時間、システム時間を表示します。
詳細はパイプラインを参照してください。
times times

現在のシェルと現在のシェルから実行されたプロセスのユーザー時間とシステム時間の累計を表示します。
終了ステータスとして0を返します。
trap trap [-lp] [[引き数シグナルの指定 ...]

現在のシェルが指定されたシグナルを受信した際に実行するコマンドを引き数として指定します。

シグナルの指定は以下のいずれかの方法で記述します。
コマンドを指定しないか、-を引き数として指定した場合、指定されたシグナルを受信した際の動作はデフォルトの状態にリセットされます。
空文字列を引き数として指定した場合、指定されたシグナルを受信しても無視します。
オプションも引き数も指定されなかった場合、シグナルに対するコマンド標準出力に出力します。
以下をシグナルの指定とすることもできます。
シグナルの指定説明
EXITシェルの終了時に指定されたコマンドを実行します。
DEBUG単純なコマンドforコマンド、caseコマンド、selectコマンド、算術forコマンドの前、および関数内の最初のコマンドの実行前に指定されたコマンドを実行します。
RETURN関数の終了、.、およびsourceで読み込んだスクリプトが終了した場合に指定されたコマンドを実行します。
ERR単純なコマンドが0以外の終了ステータスで終了した場合に指定されたコマンドを実行します。
ただし、以下の場合、コマンドは実行されません。(errexitの条件と同じ。)

シグナルの指定が不正な場合を除いて、終了ステータスとして0を返します。
true true

終了ステータスとして真を示す0を返します。
type type [-aftpP] 名前 ...

指定された名前がシェルでどのように解釈されるかを表示します。
指定された名前を持つものが見つかった場合、終了ステータスとして0を返し、見つからなかった場合、0以外を返します。
ulimit ulimit [-HSTabcdefilmnpqrstuvx [制限値]]

現在のシェルおよび現在のシェルから起動されるプロセスが利用可能なリソースを制限します。制限できるリソースはOSによって異なります。
制限値は数字(単位は設定するリソースに従います。)、またはhard(Hard Limitの値)、soft(Soft Limitの値)、unlimited(制限無し)の何れかを設定することができ、指定されたリソースの制限値を設定します。制限値を指定しなかった場合、現在のSoft Limitの値を標準出力に出力します。
複数のリソースが指定されている場合、制限の名称と単位が値の前に出力されます。
  • -H
    Hard Limitとして制限を設定します。Hard Limitは一度設定するとroot以外のユーザーが制限値を増加させることはできません。
  • -S
    Soft Limitとして制限を設定します。Soft LimitはHard Limitまで制限値を変更することが可能です。
  • -T
    スレッドの最大数を制限します。
  • -a
    現在の制限値を全て標準出力に出力します。
  • -b
    ソケットバッファの最大サイズを制限します。
    1024バイト単位のブロック数を指定します。
  • -c
    生成されるコアダンプファイルの最大サイズを制限します。
    1024バイト単位のブロック数を指定します。
  • -d
    プロセスのデータセグメントの最大サイズを制限します。
    kbyte単位で指定します。
  • -e
    スケジュール優先度(nice値)の最大値を制限します。
  • -f
    シェルとその子プロセスが生成できるファイルの最大サイズを制限します。
    1024バイト単位のブロック数を指定します。
  • -i
    保留中シグナルの最大数を制限します。
  • -l
    メモリにロックできる最大サイズを制限します。
    kbyte単位で指定します。
  • -m
    常駐セットサイズの最大値を制限します。
    kbyte単位で指定します。
  • -n
    オープン可能な最大ファイルディスクリプタ数を制限します。
  • -p
    パイプラインの最大サイズを制限します。
    512バイト単位のブロック数を指定します。
  • -q
    POSIXメッセージキューの最大バイト数を制限します。
  • -r
    リアルタイム・スケジューリングの優先度の最大値を制限します。
  • -s
    最大スタックサイズを制限します。
    kbyte単位で指定します。
  • -t
    CPU時間の最大量を制限します。
    秒単位で指定します。
  • -u
    ユーザーが使用できるプロセスの最大数を制限します。
  • -v
    シェルが使用できる仮想メモリの最大値を制限します。
    kbyte単位で指定します。
  • -x
    ファイルロックの最大数を制限します。
オプションが全く指定されなかった場合、-fオプションが指定されたものと見做されます。
ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 128063
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションや引き数が指定された場合
  • 新しい制限値の設定に失敗した場合
umask umask [-p] [-S] [モード]

ファイル生成マスクを設定します。
モードは以下のいずれかの方法で指定します。
  • 8進数の数値
    umask 002
    $ umask
    0002
    $ umask -pS
    umask -S u=rwx,g=rwx,o=rx
    $ touch file
    $ ls -la file
    -rw-rw-r-- 1 user1 user1 0  5月 21 13:06 file
    
  • chmod(1)と同様の文字の組み合わせ
    umask u=rwx,g=rwx,o=rx
    $ umask
    0002
    $ umask 0
    $ umask g-w,o-wx
    $ umask
    0023
    
モードを指定しなかった場合、現在のファイル生成マスク標準出力に出力します。
モードの詳細はアクセス権限の変更(付与と剥奪)を参照してください。

以下の場合を除いて終了ステータスとして0を返します。
unalias unalias [-a] [名前 ...]

定義されたエイリアスを削除します。
-aオプションを指定した場合、全てのエイリアスを削除します。

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションや引き数が指定された場合
  • 定義されていないエイリアスを削除しようとした場合
unset unset [-fv] [名前 ...]

変数、または関数を削除します。
  • -f
    指定された名前の関数を削除します。
  • -v
    指定された名前の変数を削除します。
    読み込み専用属性が付加された変数を削除することはできません。
オプションが指定されなかった場合、変数を削除します。

COMP_WORDBREAKSRANDOMSECONDSLINENOHISTCMDFUNCNAMEGROUPSDIRSTACKを削除した場合、これらの変数が持っている特別な特性も失われます。再設定してもその特性が元に戻ることはありません。

以下の場合を除いて終了ステータスとして0を返します。
  • 不正なオプションや引き数が指定された場合
  • 読み込み専用属性の付加された変数を削除しようとした場合
until 詳細は複合コマンドuntilを参照してください。
do - doneで囲まれたコマンドを繰り返し実行します。

以下の例はuntilに続くコマンドの最後のコマンド終了ステータスが成功=0になるまでの間、do - doneで囲まれたコマンドを繰り返し実行します。
$ until [ -f data.txt ]; do echo "ファイルが存在しません。"; sleep 5; done
ファイルが存在しません。
ファイルが存在しません。
上記の例では5秒ごとにdata.txtファイルが存在するかチェックし、ファイルが作成されるまで実行を継続します。
wait wait [n ...]

指定されたプロセス、またはバックグラウンドジョブを待ち合わせ、その終了ステータスを返します。

引き数としてプロセスID、またはジョブ番号を指定します。
ジョブ番号を指定した場合、そのジョブパイプラインに含まれる全てのプロセスを待ち合わせます。
プロセスID、ジョブ番号のいずれも指定されなかった場合、現在アクティブな全ての子プロセスを待ち合わせし、終了ステータスとして0を返します。
存在しないプロセスID、またはジョブ番号が指定された場合、終了ステータスとして127を返します。
それ以外の場合、待ち合わせていたプロセス、またはジョブ終了ステータスを返します。
while 詳細は複合コマンドwhileを参照してください。
do - doneで囲まれたコマンドを繰り返し実行します。

以下の例はwhileに続くコマンドの最後のコマンド終了ステータスが成功=0である間、do - doneで囲まれたコマンドを繰り返し実行します。
$ while [ -f data.txt ]; do echo "ファイルが存在します。"; sleep 5; done
ファイルが存在します。
ファイルが存在します。
上記の例では5秒ごとにdata.txtファイルが存在するかチェックし、ファイルが削除されるまで実行を継続します。
{ コマンド; } 詳細は複合コマンドグループコマンドを参照してください。
複数のコマンドを一つのグループとして実行します。