🐧

【Linux】環境変数とシェル変数の違い

2023/10/28に公開

結論

  • 環境変数はシェル全体の設定で別のシェルを起動しても引き継がれる変数
  • シェル変数は別のシェルを起動しても引き継がれない変数

つまり影響するスコープが違うため、

  • 環境変数 → グローバル変数
  • シェル変数 → ローカル変数

という感じに捉えてます。

環境

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=hogeFUGA=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

以上のように、環境変数は別のシェルを開いても引き継がれ、シェル変数は現在のシェルでしか使用できない変数になります。

GitHubで編集を提案

Discussion