Shell変数と環境変数について
目次
関連
以下の内容について、この記事では前提としています。
Shell変数と環境変数
Shell scriptなどにおいても出てきましたが、Shellには変数というものがあり値に名前を付けておくことが出来ます。
変数には2つの種類があり、そのshell環境でしか保持されないShell変数と、そのshellから起動された新しいshellなどの環境にも引き継げる環境変数があります。
ここから変数の引き継ぎについて示すため、bashの中でbashを新しく起動します。そこでレイヤーをわかりやすくするためプロンプト(Shellの待機を示す先頭の文字,$とか)を1個目のBash(親)を>、2個目のBashを>>とします。
bash> NAME="alice" > echo $NAME alice # 新しいbashを立ち上げる > bash >> echo $NAME # 新しいBashには$NAMEが引き継がれないので何も表示されない >> exit # 2個目のbashから抜ける > echo $NAME" alice # 1個目のBashに戻ってきたので値を参照できる
環境変数を使うことで子プロセスにも値を引き継ぐことが出来る。
bash> NAME="alice" > echo $NAME alice > export NAME # `export`によって$NAMEがその後のShellに引き継がれるように > bash >> echo $NAME alice # 👆️exportにより環境変数となったため # 子プロセス(bash)にも変数が引き継がれている >> NAME="olivi" >> exit # 2個目のBashから抜ける > echo $NAME alice # 引き継ぎは親->子に対して1方向性のため # 子Bash内でNAMEを書き換えても1つのbashの変数には影響しない
また、環境変数はprintenvというコマンドで一覧出来ます。
デフォルトで存在する環境変数
ユーザーネーム($USER)などのユーザー固有の値などは勝手にShellが読み取り環境変数として保持してくれます1。これにより同じ設定ファイルなどを複数人で共有してもユーザー名などの固有値を記述しなくてすむ(固有値の決定を実行まで遅延できる)のでとても便利です。
| var | desc | example |
|---|---|---|
| HOME | ユーザーのホームディレクトリ | ~/ |
| PATH | コマンドの検索対象2 | /usr/bin |
| USER | ユーザ名 | alice |
| PWD | 現在のディレクトリのパス | ~/Desktop |
他にも色々ある。
あとから追加される
プログラムにもよりますが設定ファイルと追加で環境変数などを使って使用するポート番号やIPアドレスなどを管理するものもあります。あとはAIなどのAPIキーとか。