Bash Basics | Basicsトップページ | トップページ
パラメータと変数
パラメータとは値を保持するためのもので、名前、整数、特殊文字のいずれかを識別子として持ち、$に続いて識別子を記述するか、$に続く対のブレース{}で識別子を囲んで記述します。
パラメータに空文字列を含む何らかの値が代入されている場合、そのパラメータは設定(定義)されていると言います。
一度値が設定されたパラメータはunsetで削除するまで設定された状態となります。
識別子 | 説明 |
---|---|
* | 位置パラメータがある場合には、空白文字で区切られた全ての位置パラメータに展開されます。 ダブルクォートでクォートされている場合には、IFSの最初の文字で区切られた1つの単語として展開されます。 IFSが設定されていない場合には、空白文字で区切られます。 IFSが空文字列の場合には、展開される位置パラメータは連結された一連の文字列となります。 |
@ | 位置パラメータがある場合には、空白文字で区切られた全ての位置パラメータに展開されます。 ダブルクォートでクォートされている場合には、全ての位置パラメータは別々の単語として展開され、"$1" "$2" ...と同じ意味となります。 |
# | 位置パラメータの数を示す10進数の整数値に展開されます。 |
? | フォアグラウンドで最後に実行されたコマンドまたはパイプラインの終了ステータスに展開されます。 |
- | 現在のシェルのオプションフラグに展開されます。 |
$ | シェルのプロセスIDに展開されます。 ()を使ったサブシェルの内部ではサブシェルのプロセスIDではなく、現在のシェルのプロセスIDに展開されます。 |
! | 最後に実行されたバックグラウンドのコマンドのプロセスIDに展開されます。 |
0 | シェルまたは、スクリプト名に展開されます。 |
_ | シェルの起動時には実行するシェルまたは、スクリプト名が展開されます。 シェルでコマンドを実行した後では、最後に実行したコマンドの最後の展開後の引き数に展開されます。 |
変数は名前を識別子として持つパラメータです。
変数は値と0個以上の属性を持ちます。属性はdeclareコマンドで設定することができます。
bashでは、以下の3つの変数を利用することができます。
変数名: str1
値: "Hello World"
${str1}
変数名: str2
値: "Hello Everyone"
${str2}
変数名: i
値: 256
${i}
変数名: j
値: 381
${j}
変数名: var
キー: 0
値: 135
${var[0]}
${var[-n-1]}
キー: 1
値: 267
${var[1]}
${var[-n]}
キー: 2
値: 356
${var[2]}
${var[-n+1]}
キー: n
値: 181
${var[n]}
${var[-1]}
…
変数名: emp
キー: "fistname"
値: "Ichiro"
${emp["firstname"]}
キー: "lastname"
値: "Suzuki"
${emp["lastname"]}
キー: "id"
値: 874061
${emp["id"]}
キー: "section"
値: "Sales"
${emp["section"]}
bashで変数を使用するためには、変数名に値を設定するか、変数を宣言して属性を付与します。
宣言、属性の定義 | 説明、例 |
---|---|
declare 変数名=値 | 変数名を名前として持つ変数を明示的に宣言し、値を設定します。
|
declare 変数名 | 変数名を名前として持つ変数を明示的に宣言します。
|
declare -x 変数名=値 または export 変数名=値 |
変数名を名前として持つ環境変数を明示的に宣言し、値を設定します。
|
declare -x 変数名 または export 変数名 |
変数名を名前として持つ変数に環境変数としての属性を付与します。
|
declare -r 変数名=値 または readonly 変数名=値 |
変数名を名前として持つ読み込み専用の変数を明示的に宣言し、値を設定します。 読み込み専用属性を持つ変数の値を変更したり、変数を削除することはできません。
|
declare -r 変数名 または readonly 変数名 |
変数名を名前として持つ変数に読み込み専用属性を付与します。 読み込み専用属性を持つ変数の値を変更したり、変数を削除することはできません。
|
変数名=(値1 値2 ... 値N) | 変数名を名前として持つ配列変数"に値を設定します。
|
declare -a 変数名=(値1 値2 ... 値N) | 変数名を名前として持つ配列変数"を明示的に宣言し、値を設定します。
|
declare -a 変数名 | 変数名を名前として持つ配列変数"を明示的に宣言します。
|
declare -A 変数名=(["キー1"]=値1 ["キー2"]=値2 ... ["キーN"]=値N) | 変数名を名前として持つ連想配列変数を明示的に宣言し、値を設定します。
|
declare -A 変数名 | 変数名を名前として持つ連想配列変数を明示的に宣言します。
|
declare -i 変数名=値 | 変数名を名前として持つ整数属性の変数(整数型変数)を明示的に宣言し、値を設定します。
|
declare -i 変数名 | 変数名を名前として持つ整数属性の変数(整数型変数)を明示的に宣言します。
|
declare -l 変数名=値 | 変数名を名前として持つ文字列型変数を明示的に宣言し、値を設定します。 変数の値は英小文字に変換されます。
|
declare -l 変数名 | 変数名を名前として持つ文字列型変数を明示的に宣言します。 変数の値は英小文字に変換されます。
|
declare -u 変数名=値 | 変数名を名前として持つ文字列型変数を明示的に宣言し、値を設定します。 変数の値は英大文字に変換されます。
|
declare -u 変数名 | 変数名を名前として持つ文字列型変数を明示的に宣言します。 変数の値は英大文字に変換されます。
|
変数へ値を代入するには、変数名=値のように空白を空けずに変数名と値を=で続けて記述します。
以下の構文で変数への値の代入、参照(展開)、定義済みの変数の削除を行うことができます。
基本的な変数 | 配列変数 | 連想配列変数 | |
---|---|---|---|
代入 | 変数名=値 値を省略した場合、空文字列が代入されます。 |
複合代入構文によっ
て値を配列に代入することができます。 変数名=(キー1=値1 キー2=値2 ... キーn=値n ) キーと値を=で続けて1組のペアとして任意の数だけ指定します。 値を省略した場合、空文字列が代入されます。 全体を()で囲みます。 | |
一般的にはキーは0から始まる連続する整数で構成しますが、不連続な整数をキーに指定することも可能です。 キーは省略することができます。キーを省略した場合、その文中で直前に代入されたキーに1を加えた値と見做されます。 |
キーを省略することはできません。 | ||
事前に変数名が宣言されていない場合、代入を行うと新しい変数として設定されます。 | 未定義の連想配列変数への代入はできません。必ず事前に連想配列変数としての宣言が必要です。 | ||
配列の追加 | 変数名+=(キー1=値1 キー2=値2 ... キーn=値n ) | 現在の最大のキー値よりも1つ大きいキー値で新しい値が追加されます。 | 新しいキーと値の組が追加されます。 |
参照 | $変数名、${変数名} | ${変数名[キー]} | |
削除 | unset 変数名とすると変数を削除することができます。 | unset 変数名[キー]とすると指定されたキーの要素を削除することができます。 unset 変数名、unset 変数名[*]、またはunset 変数名[@]とすると配列変数全体を削除することができます。 |
$ declare -i i x=3 y=4
$ i=x*y*2
$ i+=5
echo ${i}
29
$ str="Hello World"
$ str+=' !!'
$ echo ${str}
Hello World !!
$ colors=(red blue green orange)
$ colors+=(violet brown)
$ echo ${colors[@]}
red blue green orange violet brown
$ fruits=([0]=apple [2]=orange melon [5]=lemon)
$ echo ${!fruits[@]}
0 2 3 5
$ declare -A employee=([no]=3267 [fistname]="ichiro" [lastname]="suzuki")
$ echo ${employee[@]}
3267 suzuki ichiro
デフォルトでは変数、および関数のスコープ(有効範囲)はその変数や関数を定義したシェルのプロセス内でのみ有効となります。
declareコマンドで-xオプションを指定するか、exportコマンドでエクスポートした場合には、シェルから起動するサブシェルやコマンド内、およびそれらからさらに起動される孫以降のプロセス全てで参照可能となります。
このようにエクスポートされて後続の環境全てで参照可能となった変数を環境変数と呼びます。
後続の環境(プロセス)での環境変数の値は親から起動された時点の値が引き継がれますが、子のプロセスでは別のスコープとして管理されます。このため、非同期に親子で値を変更してもそれらの値がお互いに影響を受けることはありません。
つまり、環境変数を使用して子から親へ値や状態を受け渡すことはできません。
また、属性もその属性を設定したシェルのプロセス内でのみ有効となります。読み込み専用属性が付加された環境変数は後続の環境では別のスコープとなり、読み込み専用属性は失われ、値を変更することができますが、変更された内容はそれ以降の環境のみで引き継がれ、読み込み専用属性が設定されている親の変数の値は変更されません。
#!/usr/bin/bash
function func1 () {
local var1="Hello World"
var2="Hello World"
echo local var1: \"${var1}\" in func1
echo var2: \"${var2}\" in func1
echo
func2
echo var1: \"${var1}\" in func1 after calling func2
echo var2: \"${var2}\" in func1 after calling func2
echo
}
function func2 () {
var1="Welcome to the World"
var2="Welcome to the World"
unset var3
echo var1: \"${var1}\" in func2
echo var2: \"${var2}\" in func2
echo
}
var1="Hello"
var2="Hello"
var3="Hello"
echo var1: \"${var1}\" in main
echo var2: \"${var2}\" in main
echo var3: \"${var3}\" in main
echo
func1
echo var1: \"${var1}\" in main after calling func1
echo var2: \"${var2}\" in main after calling func1
echo var3: \"${var3}\" in main after calling func1
|
|
位置パラメータは1以上の整数値で表されるパラメータでシェルが起動された時の引き数が代入されます。
setを使って位置パラメータに代入し直すことも可能ですが、代入文を使っての値の代入はできません。
シェルの関数が呼び出された場合、関数内で位置パラメータを参照すると関数を呼び出した時の引き数が代入されています。関数の処理から呼び出し元に戻った場合、呼び出し元で設定されていた位置パラメータの内容のままとなります。
2桁以上の整数値で表される位置パラメータを展開する場合、整数値を{}で囲む必要があります。
位置パラメータ | 説明 |
---|---|
${1} または $1 | シェルへの一番目の引き数が展開されます。 関数内では関数への一番目の引き数が展開されます。 |
${2} または $2 | シェルへの二番目の引き数が展開されます。 関数内では関数への二番目の引き数が展開されます。 |
${n} または $n | シェルへのn番目の引き数が展開されます。 関数内では関数へのn番目の引き数が展開されます。 nが2桁以上の整数値の場合、${n}のようにnを{}で囲む必要があります。 |
#!/usr/bin/bash
for ((i=1; i<=$#; i++)) {
eval echo '\$'$i: \$$(($i))
}
実行例:$ ./params.sh a b c
$1: a
$2: b
$3: c
$ ./params.sh "a b c" 1 2
$1: a b c
$2: 1
$3: 2
シェルは特殊文字で表されるいくつかの特別なパラメータがあります。
下記の特殊パラメータは参照のみ(読み込み専用)で値を代入することはできません。
特殊パラメータ | 説明 | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
${*} または $* | 全ての位置パラメータに展開されます。 ダブルクォートに囲まれた中で展開される時は、IFSの最初の文字で区切られた1つの単語として展開されます。 つまり、"$*"は"$1c$2c...c$n"に展開されます。cはIFSの最初の文字となります。 IFSが設定されていない場合、cは空白文字となり、空白文字で区切られた1つの単語となります。 IFSが空文字列の場合、全ての位置パラメータは区切られず、連結された1つの単語となります。 | ||||||||||||||||||||||||||||||||||||||||
${@} または $@ | 全ての位置パラメータに展開されます。 ダブルクォートに囲まれた中で展開される時は、それぞれ別々の単語として展開されます。 つまり、"$@"は"$1" "$2" ... "$n"に展開されます。 位置パラメータがない場合、"$@"、および$@を展開すると取り除かれます。 | ||||||||||||||||||||||||||||||||||||||||
${#} または $# | 位置パラメータの個数を示す整数値に展開されます。 | ||||||||||||||||||||||||||||||||||||||||
${?} または $? | 最後に実行されたフォアグラウンドのパイプラインの終了ステータスに展開されます。 | ||||||||||||||||||||||||||||||||||||||||
${-} または $- | 現在のシェルで有効化されているオプションのうち、setで指定可能な引き数「abefhkmnptuvxBCEHPT」に展開されます。
| ||||||||||||||||||||||||||||||||||||||||
${$} または $$ | 現在のシェルのプロセスIDに展開されます。 | ||||||||||||||||||||||||||||||||||||||||
${!} または $! | 最後にバックグラウンドで実効されたコマンドのプロセスIDに展開されます。 | ||||||||||||||||||||||||||||||||||||||||
${0} または $0 | 現在のシェルまたはスクリプトの名前に展開されます。 コマンドを記述したスクリプトを指定してbashを起動した場合、$0にはスクリプトのファイル名が設定されます。 bashを起動する際に-cオプションと複数の文字列を指定した場合、最初の文字列がコマンドとして解釈され、2つ目の文字列が$0に設定されます。
実行例についての説明はシェルのオプション-cを参照してください。
| ||||||||||||||||||||||||||||||||||||||||
${_} または $_ | シェルの起動時には実行するシェルまたはスクリプトの絶対パスが設定されます。 シェルの起動後にコマンドを実効している場合、最後(直前)に実行したコマンドに対する展開後の最後の引き数が設定されます。 |
#!/usr/bin/bash
function print() {
for ((i=1; i<=$#; i++)) {
eval echo '\$'$i: \$$(($i))
}
}
echo 'Case: IFS=;'
IFS=';'
echo '$*': "\"$*\""
echo '$@': "\"$@\""
echo 'Sub Case: "$*"'
print "$*"
echo 'Sub Case: "$@"'
print "$@"
echo 'Case: IFS='
IFS=''
echo '$*': "\"$*\""
echo '$@': "\"$@\""
echo 'Sub Case: "$*"'
print "$*"
echo 'Sub Case: "$@"'
print "$@"
実行例:
|
位置パラメータがない場合、"$*"は関数へ空文字列が渡されていますが、"$@"は関数へは引き数が渡されません。 "$@"を使用する場合、構文上で何も無くなることが許されないような場所での記述には注意が必要です。 例えば、[ "$@" == "" ]のような記述をした場合、位置パラメータがないと構文エラーとなります。 これは、[ "" == "" ]ではなく、[ == "" ]と展開されるからです。 |
|
複数の位置パラメータがある場合、"$*"はIFSの最初の文字で区切られた1つの単語(引き数)として関数へ渡されていますが、"$@"はそれぞれ別々の単語(引き数)として関数へ渡されています。 IFSが空文字列の場合、"$*"は引き数が連結されて1つの単語(引き数)として関数へ渡されます。 |
|
上記の例と同様ですが、"$@"はクォーテーションで囲まれた空白文字を含む文字列が渡されても1つの引き数として処理されます。 |
|
空文字列を引き数とした場合も同様に"$@"は1つの引き数として処理されます。 |
以下の変数はシェルが設定します。
シェル変数名 | 説明 | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BASH | 現在実行しているbashの完全なパスが設定されます。 | |||||||||||||||||||||
BASHOPTS | 有効化されているシェルのオプション(shoptでonになっているもの)がコロンで区切って設定されます。 このシェル変数は読み込み専用です。 このシェル変数がbashの起動時に設定されている場合、設定ファイルを読み込む前にシェル変数で設定されているオプションが有効化されます。 | |||||||||||||||||||||
BASHPID | 現在実行しているbashのプロセスIDが設定されます。 サブシェルなどいくつかの環境では$$と値が異なります。 | |||||||||||||||||||||
BASH_ALIASES | 設定されているエイリアスに対応する連想配列です。
エイリアスはaliasコマンドで編集しますが、この配列変数"を編集するとエイリアスを変更することができます。つまり、配列変数"に要素を追加するとエイリアスに追加され、配列変数"の要素を削除するとエイリアスが削除されます。 | |||||||||||||||||||||
BASH_ARGC | 拡張デバッグモード(shoptのextdebugオプションが有効)の場合、現在の呼び出しスタックのフレームごとの引き数の数が配列変数"に設定されます。 サブルーチンが実行されるたびにそのサブルーチンの引き数の数がスタックの一番上に置かれます。 例はトレース情報の出力と記録を参照してください。 | |||||||||||||||||||||
BASH_ARGV | 拡張デバッグモード(shoptのextdebugオプションが有効)の場合、現在の呼び出しスタックのフレームごとの全ての引き数が配列変数"に設定されます。 サブルーチンが実行されるたびにそのサブルーチンの引き数がスタックの一番上に置かれます。 例はトレース情報の出力と記録を参照してください。 | |||||||||||||||||||||
BASH_CMDS | bashが内部に持つコマンドのハッシュテーブルに対応する連想配列です。 ハッシュテーブルはhashコマンドで編集しますが、この配列変数"を編集するとハッシュテーブルを変更することができます。 つまり、配列変数"に要素を追加するとハッシュテーブルに追加され、配列変数"の要素を削除するとハッシュテーブルから削除されます。 | |||||||||||||||||||||
BASH_COMMAND | 現在実行しているか実行しようとしているコマンドが設定されます。 シグナルを受信しtrapによってシェルがコマンドを実行している場合は、trapをトリガーした時に実行していたコマンドが設定されます。 | |||||||||||||||||||||
BASH_EXECUTION_STRING | bashの起動時のオプション-cで指定されたコマンドが設定されます。 | |||||||||||||||||||||
BASH_LINENO | 現在実行中のシェル(スクリプトファイル)内で関数が呼び出された場合、関数を呼び出した行数がスタック状に配列変数"に設定されます。 配列変数"の最初の要素の${BASH_LINENO[0]}は現在実行中の関数が呼び出された(呼び出し元の)行数が設定され、添字が1つずつ増えるごとに呼び出し元に遡って、呼び出された行数が設定されます。 ある関数${FUNCNAME[$i+1]}から関数${FUNCNAME[$i]}を呼び出した場合、${BASH_LINENO[$i]}には、呼び出し元の行数が設定されます。 現在の行数は${LINENO}に設定されます。 | |||||||||||||||||||||
BASH_REMATCH | 組み込みコマンドの[[中で二項演算子 =~ が使用されている場合、正規表現にマッチする文字列が配列変数"に設定されます。 配列変数"の最初の要素の${BASH_REMATCH[0]}には正規表現全体にマッチする文字列が設定されます。 配列変数"の要素nの${BASH_REMATCH[n]}には、()でグループ化された部分式のn番目にマッチする文字列が設定されます。
| |||||||||||||||||||||
BASH_SOURCE | 組み込みコマンドのsourceコマンドでファイルを読み込んで実行した場合、呼び出されたファイル名がスタック状に配列変数"に設定されます。 配列変数"の最初の要素の${BASH_SOURCE[0]}にはsourceコマンドで呼び出されて現在実行中のファイル名が設定されます。 配列変数"の要素nの${BASH_SOURCE[n]}には、sourceコマンドで階層的にファイルが読み込まれている場合、n番前に読み込まれたファイル名が設定されます。 | |||||||||||||||||||||
BASH_SOURCELL | シェルの起動時の初期値を0として、サブシェルが作成されるごとに1ずつ増加した値が設定されます。 | |||||||||||||||||||||
BASH_VERSINFO | 読み込み専用属性を持つ配列変数"で、現在実行されているbashのバージョン情報が下記の通り設定されます。
| |||||||||||||||||||||
BASH_VERSION | 現在実行されているbashのバージョン情報を示す文字列が設定されます。
| |||||||||||||||||||||
COMP_CWORD | プログラム補完機能から呼ばれたシェル関数または外部コマンド内で現在カーソルがある位置の単語の配列変数"${COMP_WORDS}の要素数が設定されます。 | |||||||||||||||||||||
COMP_KEY | プログラム補完機能から呼ばれたシェル関数または外部コマンド内で補完関数を呼び出したキーのコードが設定されます。
| |||||||||||||||||||||
COMP_LINE | プログラム補完機能から呼ばれたシェル関数または外部コマンド内で現在のコマンド行が設定されます。 | |||||||||||||||||||||
COMP_POINT | プログラム補完機能から呼ばれたシェル関数または外部コマンド内で現在のコマンド行の先頭からのカーソルの位置が設定されます。 現在のカーソルの位置がコマンド行の最期にある場合は${#COMP_LINE}の値と等しくなります。 | |||||||||||||||||||||
COMP_TYPE | プログラム補完機能から呼ばれたシェル関数または外部コマンド内で補完のタイプを示すコードが設定されます。
| |||||||||||||||||||||
COMP_WORDBREAKS | 単語補完を行う際、readlineが単語分割の区切り文字として扱う文字のリストです。 このシェル変数をunsetすると再びsetしても動作しません。 | |||||||||||||||||||||
COMP_WORDS | プログラム補完機能から呼ばれたシェル関数または外部コマンド内で現在のコマンド行を${COMP_WORDBREAKS}によって単語分割された各単語の配列変数"です。 | |||||||||||||||||||||
COPROC | 組み込みコマンドのcoprocで明示的に名前を指定せずにコプロセスを実行した場合、コプロセスと接続されている標準入出力のファイルディスクリプタが配列変数"に設定されます。
例はコプロセスとのパイプを参照してください。 | |||||||||||||||||||||
DIRSTACK | 現在のディレクトリスタックの内容が配列変数"に設定されます。 ディレクトリスタックの追加と削除は組み込みコマンドのpushdとpopdで行います。 ディレクトリスタックの内容が変更される時、このシェル変数の値に~が含まれる場合、チルダ展開が行われます。
このシェル変数をunsetすると再びsetしても動作しません。
| |||||||||||||||||||||
EUID | 現在のユーザーの実効ユーザーIDが設定されます。 このシェル変数は読み込み専用です。 | |||||||||||||||||||||
FUNCNAME | 現在実行中のシェル(スクリプトファイル)内で関数が呼び出された場合、呼び出された関数名がスタック状に配列変数に設定されます。 配列変数の最初の要素の${FUNCNAME[0]}は現在実行中の関数名が設定され、添字が1つずつ増えるごとに呼び出し元に遡って、呼び出された関数名が設定されます。 最も下の要素(配列変数の最も大きな添字の要素)はそのシェルがsourceコマンドから実行された場合、"source"が設定され、それ以外の場合には"main"が設定されます。 例として下記のようなスクリプトfuncname.shを作成します。
実行例:
sourceコマンドによる実行例:
| |||||||||||||||||||||
GROUPS | 現在のユーザーが所属する全てのグループのIDが配列変数"に設定されます。 このシェル変数への代入は終了ステータスとしてエラーを返します。 このシェル変数をunsetすると再びsetしても動作しません。 | |||||||||||||||||||||
HISTCMD | コマンドの履歴リストにおける次の履歴番号(次に実行するコマンドに割り振られる履歴番号)が設定されます。 このシェル変数をunsetすると再びsetしても動作しません。 | |||||||||||||||||||||
HOSTNAME | 現在のシェルが実行されているホスト名が設定されます。 | |||||||||||||||||||||
HOSTTYPE | 現在のシェルが実行されているホストの種類を示す文字列が設定されます。 | |||||||||||||||||||||
LINENO | スクリプトファイルや関数内でこのシェル変数を参照した行番号を表す10進数が設定されます。 対話型のシェルなどスクリプトファイルや関数内ではない場合にこのシェル変数を参照すると不定な値が返されます。 このシェル変数をunsetすると再びsetしても動作しません。 | |||||||||||||||||||||
MACHTYPE | 現在のシェルが実行されているホストの種類を示す完全な文字列(GNU標準のcpu-company-systemの形式の文字列)が設定されます。 | |||||||||||||||||||||
MAPFILE | 組み込みコマンドのmapfileに変数名が明示的に指定されなかった場合、読み込んだテキストが配列変数"に設定されます。 | |||||||||||||||||||||
OLDPWD | 1つ前の作業ディレクトリが設定されます。 | |||||||||||||||||||||
OPTARG | 組み込みコマンドのgetoptsで処理した最後のオプションの引き数が設定されます。 例はオプションのチェックを参照してください。 | |||||||||||||||||||||
OPTIND | 組み込みコマンドのgetoptsで次に処理するオプション、引き数のインデックス(位置パラメータの位置)が設定されます。 例はオプションのチェックを参照してください。 | |||||||||||||||||||||
OSTYPE | 現在のシェルが実行されているオペレーティングシステムを示す文字列が設定されます。 | |||||||||||||||||||||
PIPESTATUS | フォアグラウンドで最後に実行したパイプラインの各プロセスの終了ステータスが配列変数"に設定されます。
| |||||||||||||||||||||
PPID | 現在のシェルの親プロセスのIDが設定されます。 このシェル変数は読み込み専用です。 | |||||||||||||||||||||
PWD | 現在の作業ディレクトリ(カレントディレクトリ)が設定されます。 | |||||||||||||||||||||
RANDOM | このシェル変数を参照するたびに、0から32767までのランダムな整数値が設定されます。 値を代入すると乱数の列を初期化することができます。 このシェル変数をunsetすると再びsetしても動作しません。 | |||||||||||||||||||||
READLINE_LINE | 組み込みコマンドの"bind -x"で使用するreadlineの編集バッファの内容が設定されます。 | |||||||||||||||||||||
READLINE_POINT | 組み込みコマンドの"bind -x"で使用するreadlineの編集バッファの挿入位置が設定されます。 | |||||||||||||||||||||
REPLY | 組み込みコマンドのreadで引き数が指定されなかった場合、およびselectで読み込まれた行が設定されます。 | |||||||||||||||||||||
SECONDS | 現在のシェルが起動されてからの経過秒数が設定されます。 値を代入すると代入した値とそれ以降の経過秒数が設定されます。 このシェル変数をunsetすると再びsetしても動作しません。 | |||||||||||||||||||||
SHELLOPTS | 有効化されているシェルのオプション(setの-oオプションの有効な引き数)がコロンで区切って設定されます。 このシェル変数は読み込み専用です。 このシェル変数がbashの起動時に設定されている場合、設定ファイルを読み込む前にシェル変数で設定されているオプションが有効化されます。 | |||||||||||||||||||||
SHLVL | bashが起動する時に設定されている値をインクリメント(1増加)させた値が設定されます。 | |||||||||||||||||||||
UID | 現在のシェルを起動した時のシェルのユーザーのユーザーIDが設定されます。 このシェル変数は読み込み専用です。 |
シェル変数名 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BASH_ENV | このシェル変数が非対話のbash(スクリプトの実行など)の起動時に設定されている場合、設定ファイルとして読み込まれ、シェルの初期設定を行います。 シェル変数をファイル名として扱う前にパラメータ展開、コマンド置換、算術式展開が行われます。 設定ファイルの検索にPATHは使用されません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BASH_XTRACEFD | set -xでトレース情報を出力するファイルディスクリプタとして使用されます。 トレース情報を出力するファイルは予めオープンしておき、その有効なファイルディスクリプタをこのシェル変数に設定する必要があります。 このシェル変数に新しい値を代入すると、それまでのファイルディスクリプタはクローズされ、新しいファイルディスクリプタにトレース情報が書き込まれます。このシェル変数をunsetするか空文字列を代入すると、ファイルディスクリプタはクローズされ、それ以降のトレース情報は標準エラー出力に出力されます。 スクリプトの例:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CDPATH | このシェル変数がcdコマンドの実行時に指定されている場合、ディレクトリを検索するパスとして使用されます。 パスはコロンで区切って複数指定することができます。 例えば、".:~"が指定されている場合、cdコマンドはカレントディレクトリの次に、ホームディレクトリを検索します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
COLUMNS | 現在のシェルを実行している端末の幅が変更されシグナルSIGWINCHを受信すると自動的に端末の幅が設定されます。 スクリプトでこのシェル変数を参照する場合、シグナルSIGWINCHは端末で実行されている親プロセスのみが受信することにご注意ください。つまり、別プロセスとして実行されているスクリプト内でこのシェル変数を参照してもスクリプトの起動時の値を参照していることとなります。 selectコマンドのリストを表示する際に使用されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
COMPREPLY | bashが補完候補として読み込む単語の配列変数です。 プログラム補完機能から呼ばれたシェル関数内で補完候補を設定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
EMACS | このシェル変数の値がbashの起動時に"t"に設定されている場合、シェルがEmacsのシェルバッファで動作していると見做し行編集を無効にします。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ENV | このシェル変数がPOSIXモードのbashの起動時に設定されている場合、設定ファイルとして読み込まれ、シェルの初期設定を行います。 シェル変数をファイル名として扱う前にパラメータ展開、コマンド置換、算術式展開が行われます。 設定ファイルの検索にPATHは使用されません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FCEDIT | fcコマンドのデフォルトのエディタとして使用されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FIGNORE | bashがファイル名の補完を行う時にこのシェル変数に設定されているファイルのサフィックスにマッチするファイルは補完候補から除外されます。 例えば、".o:~"をこのシェル変数の値として設定するとファイル名の補完から".o"または"~"で終るファイル名のものは補完候補から除外されます。 force_fignoreが有効化されていない場合、補完候補から除外したサフィックスを持つファイルが唯一の補完候補である場合、除外されずに補完されます。 force_fignoreが有効化されている場合、このシェル変数に設定されているサフィックスにマッチするすべてのファイルは補完候補から除外されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FUNCNEST | bashはこのシェル変数の値を関数の呼び出しの深さ(ネスト)の最大値として使用します。 0より大きい整数値をこのシェル変数に設定するとそれ以上の深さの関数呼び出しは失敗します。 例として下記のようなスクリプトfuncnest.shを作成します。
実行例:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GLOBIGNORE | bashがパス名展開を行う時にこのシェル変数に設定されているパターンにマッチするファイルは除外されます。 スクリプト内で"*"をワイルドカードではなく、文字列の一部として関数や別のスクリプトの引き数として渡したい場合、GLOBIGNORE=*と設定することでパス名展開で"*"が展開されることを抑止することもできます。 このシェル変数に空文字列以外が指定されると、dotglobオプションが有効となります。
ファイルをtouchで作成します。
最もよく使う*、?をパターンとして指定した例です。
GLOBIGNOREを設定するとパターンにマッチするファイルが除外されます。パス名展開に関連するシェルオプションを有効化するとGLOBIGNOREもシェルオプションの設定に従います。 例えば、extglobオプションを有効にして拡張パターンマッチング演算子を使うこともできます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HISTCONTROL | コマンドの履歴リストに履歴を追加する時の動作を制御する以下の値をコロンで区切って指定します。 このシェル変数が設定されていない場合や、無効な値が設定されている場合、HISTIGNOREの設定に従って履歴リストに追加されます。 コマンドが複数行にまたがる複合コマンドの場合、このシェル変数の評価は先頭行のみに対して行われます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HISTFILE | コマンドの履歴リストを保存するファイル名を指定します。 デフォルト値は~/.bash_historyです。 このシェル変数が設定されていない場合、コマンドの履歴は保存されません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HISTFILESIZE | コマンドの履歴リストファイルに保存する履歴の最大数を指定します。 デフォルト値は500です。 このシェル変数に値が設定されている場合、指定された件数を超えないように古い履歴は削除されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HISTIGNORE | コマンドの履歴リストに保存しないパターンをコロンで区切って指定します。 パターンはコマンド行の全体と完全一致する必要があります。 ただし、コマンドが複数行にまたがる複合コマンドの場合、このシェル変数の評価は先頭行のみに対して行われます。 '&'はHISTCONTROLのignoredupsと等価です。 '\&'を指定することで履歴リストの最後の行と同じコマンド行を履歴リストに保存することができるようになります。 例えば、HISTIGNORE="&:pwd:ls:ls *"と指定することで、直前のコマンド行と同じコマンド行、lsコマンドを履歴リストの保存から除外することができます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HISTSIZE | メモリ上(キャッシュ)にあるコマンドの履歴リストに保存する履歴の最大数を指定します。 デフォルト値は500です。 シェルの起動時にHISTFILEからメモリに読み込まれ、シェルの終了時に書き出されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HISTTIMEFORMAT | このシェル変数に空文字列以外が設定されるとコマンドの履歴リストを表示する時に指定された書式のタイムスタンプを表示します。 タイムスタンプは履歴のコメントとしてHISTFILEにも書き込まれます。 書式はstrftime(3)の書式文字列として扱われます。 実行例:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HOME | 現在のシェルを起動したユーザーのホームディレクトリが設定されます。 cdコマンドを引き数を指定せずに実行した時のディレクトリとなります。 このシェル変数はチルダ展開の時に参照されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HOSTFILE | このシェル変数が設定されている場合、bashはホスト名を補完するために読み込むホストのリストとして参照されます。 ファイルは/etc/hostsと同じフォーマットで記述します。 ファイルの内容が空であったり、読み込みができない場合は/etc/hostsがホストのリストとして参照されます。 このシェル変数の値が変更されると次のホスト名の補完時に新しいファイルの内容を読み込み、現在のメモリ上にあるホストのリストに追加します。 このシェル変数がunsetされるとメモリ上のホストのリストはクリアされます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IFS | bashがコマンド行の展開を行った後に単語の分割をする時やreadコマンドで行を読み込んだ後に単語に分割する場合に単語の区切りを示す文字を設定します。 デフォルト値は<空白文字><タブ文字><改行文字>です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IGNOREEOF | 対話型のシェルに対する行頭でのEOF(Ctrl+D)が入力された時の動作を制御します。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
INPUTRC | このシェル変数が設定されている場合、bashはそのファイルをreadlineの設定ファイルとして読み込みます。 設定されていない場合は、デフォルトの設定ファイル~/.inputrcがreadlineの設定ファイルとして読み込まれます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANG | ロケールカテゴリが明示的に設定されていない場合、このシェル変数の値によってロケールを決定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LC_ALL | このシェル変数が設定されている場合、他のロケールカテゴリの設定よりも優先され、ロケールを決定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LC_COLLATE | パス名展開の結果をソートする時の照合順序、パス名展開とパターンマッチングの範囲表現、等値クラス、照合順序を決定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LC_CTYPE | パス名展開とパターンマッチングの文字の解釈と文字クラスに含まれる文字を決定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LC_MESSAGES | $に続くダブルクォートされた文字列(通知や診断情報などのメッセージ、および対話型の応答)に関するロケールを決定します。 例として下記のようなスクリプトlocale.shを作成します。
メッセージカタログの作成:
LC_ALL > LC_MESSAGES > LANGの順に評価されてメッセージがローカライズされて出力されます。メッセージカタログは${TEXTDOMAINDIR}/<ロケール>/LC_MESSAGES/${TEXTDOMAIN}.moから読み込まれます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LC_MONETARY | 通貨記号、桁区切り文字、符号の位置、小数点以下の桁数など通貨の書式を決定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LC_NUMERIC | 通貨以外の数値の書式を決定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LC_TIME | 月、曜日の表記、および日付と時刻の書式を決定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LINES | 現在のシェルを実行している端末の行数が変更されシグナルSIGWINCHを受信すると自動的に端末の行数が設定されます。 スクリプトでこのシェル変数を参照する場合、シグナルSIGWINCHは端末で実行されている親プロセスのみが受信することにご注意ください。つまり、別プロセスとして実行されているスクリプト内でこのシェル変数を参照してもスクリプトの起動時の値を参照していることとなります。 selectコマンドのリストを表示する際に使用されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
このシェル変数にMaildier形式のディレクトリまたは、メールファイルのパスが設定されていて、MAILPATHが設定されていない場合、bashは設定されているパスのファイルをチェックし新しいメールの到着を検出します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MAILCHECK | bashが新しいメールの到着をチェックする頻度を秒数で設定します。 デフォルト値は60秒です。 設定された時間が経過すると次のプロンプトを表示する前に新しいメールの有無をチェックします。 このシェル変数がunsetされるか、0以上の数値以外が設定された場合、メールのチェックは行われません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MAILPATH | 新しいメールの到着をチェックするファイル名をコロンで区切って設定します。 ファイル名に続けて?の後に新しいメールが到着した時に表示されるメッセージを設定することができます。 メッセージテキスト中の$_はメールファイル名に展開されます。 設定例: MAILPATH="/var/mail/$USER?You have mail:~/shell-mail?$_ has mail!" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OPTERR | このシェル変数に0が設定されている場合、getoptsのエラーメッセージ(例えば無効なオプションの指定時など)は全く出力されなくなります。 1が設定されている場合、オプションの処理時のエラーメッセージが出力されます。 このシェル変数はシェルの起動時、およびスクリプトの実行時に1に初期化されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PATH | シェルが外部コマンドを検索するディレクトリをコロンで区切って設定します。 2つの連続するコロンまたは、先頭か末尾に設定されたコロンはカレントディレクトリを示します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POSIXLY_CORRECT | このシェル変数がbashの起動時に設定されている場合、--posixオプションを指定した時と同じように他の設定ファイルを読み込む前にPOSIXモードで動作します。 シェルの実行中にこのシェル変数が設定されると、bashはset -o posixを実行した時と同じようにPOSIXモードが有効となります。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PROMPT_COMMAND | このシェル変数が設定されている場合、プライマリプロンプトを出力する前に毎回この値がコマンドとして実行されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PROMPT_DIRTRIM | このシェル変数に0よりも大きな整数値が設定されている場合、プロンプト文字列のエスケープシーケンスの\wや\Wを展開する時、ディレクトリがパス名の最後から設定された数だけを残して省略記号に置換されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PS1 | シェルのプライマリプロンプトとして使用され、対話型のシェルのプロンプト文字列(シェルがユーザーにコマンドの入力が可能なことを示す文字)として出力されます。 設定されたプロンプト文字列はエスケープシーケンスのデコード後、パラメータ展開、コマンド置換、算術式展開、クォートの削除が行われます。 展開はシェルオプションpromptvarsの値によって決定されます。 デフォルト値は"\s-\v\$"です。 以下のエスケープシーケンスを使用することができます。
SGR (Select Graphic Rendition)を使用するとプロンプト文字列の色を変更することも可能です。 設定例を以下に示します。SGRのサンプルスクリプトも参照ください。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PS2 | シェルのセカンダリプロンプトとして使用され、継続行などのプロンプト文字列として出力されます。 PS1と同じように展開が行われます。 デフォルト値は"> "です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PS3 | selectコマンドのプロンプト文字列として出力されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PS4 | シェルの実行トレース中にbashが表示する各コマンドの前に出力されます。 PS1と同じように展開が行われます。 デフォルト値は"+ "です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SHELL | シェルの完全なパスが保存されています。 シェルを起動した時に設定されていない場合、bashが現在のユーザーのログインシェルの完全なパスを設定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TIMEFORMAT | timeコマンドの時間情報を指定する書式文字列として使用されます。 書式文字列には以下のエスケープシーケンスを使用することができます。
時間情報を出力する時に末尾に改行文字が付加されます。 実行例:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TMOUT | このシェル変数は以下の3つのタイムアウト値として使用されます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TMPDIR | このシェル変数が設定されている場合、bashはテンポラリファイルを作成するディレクトリとして使用します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
auto_resume | このシェル変数が設定されている場合、bashはリダイレクションのない1単語のみの文字列を入力した時、入力された文字列を停止中のジョブの再開候補を選択するため使用します。 このシェル変数に設定されている値によって再開候補のジョブが下記のように選択されます。
実行例:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
histchars | コマンドの履歴を展開する文字、履歴の簡易置換を行う文字、それ以降をコメントとして扱う文字を指定します。 これらは以下のように2文字または3文字で設定します。
実行例:
|