UNIX/Linuxにおけるシェルの1つであるsh/bashには、shell組み込み変数があります。
組み込み変数の名称は全て予約されており、使用、未使用に関わらず、アプリケーションプログラムやコマンドでその環境変数名の存在やその値を前提または参考にしたり、期待する場合があるのでユーザー定義によって他の目的で使用できない変数です。
また、組み込み変数にはshellや他に共通の組み込み環境変数とsh/bashのようにshellごとの組み込みshell変数があります。
shell組み込み変数とは
あらかじめ登録され常に利用できる環境変数やshell変数
その他の環境変数やshell変数は
ログイン中のみ有効
b shell系のshellの場合ユーザーがexportを使ってコマンドラインやshell関数、shellスクリプトなどから設定した環境変数やshell変数が(ログアウト後の再ログイン時には存在せず)ログイン中のみ有効であるのに比し、shell組み込み変数は常に存在し、env、printenv、declare、setなどで常に確認できる環境変数/shell変数です。
よって組み込み変数以外で常に有効にしたい環境変数やshell変数がある場合には、適宜sh/bash 管理設定ファイルに設定します。
ちなみにbashにはこの他一般的な変数と特殊変数/自動変数があります。
更にsh/bashのその他の一般的な変数は
より一時的な変数としてのみ有効
但し、一時的でありながら、shell関数内で変数を利用する場合スコープが全てグローバルとなってしまい局所化されていなかった点を改善すべくbash shell組み込みコマンドlocalによりローカル変数として宣言できるようになっています
shell組み込み変数には、shell組み込み「環境変数」とsh/bashの組み込み「shell変数」があります。
但し、OS環境、shellの種類、環境変数とshell変数における共通の変数、固有の変数などから明確に区別できない変数もあります。
環境変数 | 主な用途 |
---|---|
TZ | TIMEZONE設定(GMT,JST等) |
PWD | カレントディレクトリパス/一般にcdコマンドの結果を格納 |
TERM | 端末の種類 |
HOME | ログインユーザーのホームディレクトリパス |
LANG | 既定の国地域別利用言語 |
PATH | 実行ファイルのデフォルト探索パスリスト |
PATHEXT | PATHにおける実行ファイルの拡張子のリスト |
SHELL | 既定で利用するshellインタプリタファイルパス |
SHLVL | shellの起動階層の整数値/ログインshellは1 sh/bashでは2以上はlogoutではなくexitでshellを抜ける |
TMPDIR | 一時ディレクトリパス/一般には/tmp |
...etc. |
主なsh/bashの組み込み「環境変数」には、こういった変数があります(が、一概に組み込みshell変数と明確に分けるのは難しいものもあります)。
sh/bash shell変数 | 主な用途 |
---|---|
IFS | Internal Field Separatorの略/内部フィールドセパレータ bashで既定とする項目の区切り記号 |
PS1 | 一般ユーザーのshellプロンプト設定 |
PS2 | 複数行入力時のshellプロンプト設定 |
PS3 | select文利用時の標準入力受付用プロンプト設定 |
PS4 | set -xコマンドオプションのデバッグ用行頭記号 |
BASH | bashパス |
HISTFILE | bashで利用するパスを伴う履歴ファイル名 |
MAILCHECK | 定期的なメールチェック秒数 |
BASH_ARGC | scriptにおける引数の数(配列リストとして初期化) |
BASH_ARGV | scriptにおける実引数(配列リストとして初期化) |
BASH_LINENO | script中の行番号(配列リストとして初期化) |
BASH_SOURCE | scriptのファイル名(配列リストとして初期化) |
BASH_VERSION | bashのバージョン情報 |
BASH_VERSINFO | BASH_VERSION用の各項目のリスト |
...etc. |
一部他のshellでも利用されるものもあるかもしれませんが、主なsh/bashの組み込み「shell変数」には、こういった変数があります(が、一概に組み込み環境変数と明確に分けるのは難しいものもあります)。
尚、shell変数は、setコマンドで確認することができますが、set内容のメモリ格納領域はユーザー定義shell関数登録領域としても使用されます。
ちなみに組み込み「環境変数」と組み込み「shell変数」共に存在する組み込み変数もあります。
ここでは、ほんの一部の組み込み変数を取り上げましたが、その理由の1つは「環境変数」と「shell変数」に共通または排他の別、更に各種shellに共通のshell組み込み環境変数及びshell変数、その上更にそのshellに固有の環境変数及びshell変数、更に更にOSなどの環境における相違がある場合などを考えたら頭がクラクラしてきたから?です。