1.シェルの変数とは
変数とは、値の出し入れをする箱のようなもので、bash等のシェルの機能の一つ。値等の一時的な保管やデータの共有等に使う。
2.使い方
(1)変数の作成・保存
「変数名=値」により保存できる。
例1)variable=999
→変数「variable」に値「999」を保存している。
【命名規則・注意事項】
変数名には以下の命名規則・注意事項がある。
- 「=」と変数名・値の間に空白を入れないこと
- 変数名の先頭に数字を使うことはできない
- 使える文字は、英字・数字・アンダーバー(_)のみ
(2)変数の呼び出し
「$変数名」で変数の呼び出しができる。
例2)echo $variable
→変数「variable」に保存された値「999」が出力される。
3.変数の種類
(1)シェル変数(ローカル変数)と環境変数
変数にはシェル変数(ローカル変数)と環境変数の2種類があり、シェル変数は一時的かつ限定的な記憶のため、環境変数はシェルが使う環境のデータ等の永続的かつ共有的な記憶をするためのもの。
両変数ともシェルの内部に存在するが、環境変数のみ外部プロセスに渡せる。
(2)シェルがコマンド実行する流れ図
変数の種類を理解するうえで、Linuxのシェルがコマンドを実行する際の流れを理解する必要がある。
流れは下記図の通り。
┌──────────────────────────┐
│ ① ログインシェル起動※ここに環境・シェル変数がある│
│ (bash など) │
└────────┬─────────────────┘
▼
┌──────────────────────────┐
│ ② ユーザーがコマンドを入力 │
│ 例: ls -l │
└────────┬─────────────────┘
▼
┌──────────────────────────┐
│ ③ シェルがコマンドを解析&展開 │
│ ・パス検索(PATH) │
│ ・引数分解、リダイレクト展開など │
└────────┬─────────────────┘
▼※環境変数を子プロセス等に渡す
┌──────────────────────────┐
│ ④ 子プロセスや子シェルの生成 │
└────────┬─────────────────┘
▼
┌──────────────────────────┐
│ ⑤ 子プロセスが処理を実行し出力 │
│ 例: ls がファイル一覧を表示 │
└────────┬─────────────────┘
▼
┌──────────────────────────┐
│ ⑥ 子プロセス終了、シェルに戻る │
└────────┬─────────────────┘
▼
┌──────────────────────────┐
│ ⑦ ログインシェルがプロンプト表示 │
└──────────────────────────┘
図④ではログインシェルの環境変数を必要な分だけコピーして子プロセスに渡される。
この時、シェル変数は渡されない。もしも子プロセスがシェル変数を必要としていながらシェル変数が渡されなかった場合、コマンドが正しく動作しなくなる。