🐧
【Linux】環境変数とシェル変数の違い
結論
- 環境変数はシェル全体の設定で別のシェルを起動しても引き継がれる変数
- シェル変数は別のシェルを起動しても引き継がれない変数
つまり影響するスコープが違うため、
- 環境変数 → グローバル変数
- シェル変数 → ローカル変数
という感じに捉えてます。
環境
bash 5.1.16
環境変数
設定方法
試しにHOGEという環境変数を設定します。
export HOGE="hoge"
exportをつけることによって環境変数にセットすることができます。
=の左右にスペースを入れないように注意です。
確認方法
現在のシェルで確認
envコマンドで環境変数を確認できます。
今回はHOGEのみを出力してみます。
env | grep HOGE
HOGE=hogeと出力されます。
別のシェルを開いてから確認
次に、別のシェルを起動してから再確認します
bash
env | grep HOGE
これでもHOGE=hogeと出力されます。
シェル変数
設定前に先ほど起動したbashをexitで終了します。
設定方法
シェル変数としてFUGAという変数を設定します。
FUGA='fuga'
確認方法
現在のシェルで確認
シェル変数を確認するにはsetコマンドを使います。
set | grep FUGA
FUGA=fugaと出力されます。
ちなみに先ほど設定したHOGEもsetで確認できます。
set | grep -e FUGA -e HOGE
HOGE=hogeとFUGA=fugaが両方出力されます。
別のシェルを開いてから確認
次に、別のシェルを起動させます。
bash
ps -fxで確認すると以下のようになってます。
PID TTY STAT TIME COMMAND
549 pts/1 Ss 0:00 bash
3362 pts/1 S 0:00 \_ bash
3365 pts/1 R+ 0:00 \_ ps -fx
1 pts/0 Ss+ 0:00 /bin/bash
この状態でシェル変数を確認します。
set | grep FUGA
今度は何も出力されません。
次に以下のコマンドを実行します。
set | grep -e FUGA -e HOGE
すると環境変数であるHOGE=hogeのみが出力されます。
exitしてから再度確認するとFUGA=fugaが出力されます。
exit
set | grep FUGA
以上のように、環境変数は別のシェルを開いても引き継がれ、シェル変数は現在のシェルでしか使用できない変数になります。
Discussion