環境変数

1.シェル変数と環境変数の違い

シェル変数 (Shell Variables)
  • 一つのシェル内でのみ有効な変数。
  • シェルスクリプトやコマンドラインセッション内で使用される。
  • ローカル変数とも呼ばれる。
環境変数 (Environment Variables)
  • シェル変数の一種で、プロセスの環境に設定される変数。
  • 親プロセスから子プロセスに引き継がれ、関連するシェルや実行されたコマンドでも参照可能。
  • グローバル変数ではなく、シェルとその関連プロセスに限定される。

 この区別により、シェル変数は単一のシェル内でのみ有効であり、環境変数は関連するプロセス間で情報を共有できるようになります。

2. シェル変数と環境変数の違いを確認する例

# シェル変数の設定
$ shell_var='shell var'
$ echo $shell_var  # シェル変数の内容を表示
shell var      # シェル変数の出力

# 環境変数への設定
$ export env_var='env var'
$ echo $env_var # 環境変数の内容を表示
env var      # 環境変数の出力
$ bash       # 新しいサブシェルを起動

# サブシェルでの確認
$ echo $shell_var    # シェル変数の内容を表示
                        # エラー!シェル変数はサブシェルで参照できない
$ echo $env_var  # 環境変数の内容を表示
env var      # 環境変数の出力
$ env_var='env var change'
$ exit   # サブシェルを終了

# 元のシェル
$ echo $env_var # 環境変数の内容を表示
env var      # 値の変更が反映されていない

 シェル変数と環境変数の違いを下図で示します。シェル変数は新たに起動した別のシェルで参照できませんが、環境変数では参照できます。

 ここで注意すべき点は、新しいシェルで環境変数の内容を書き換えても元のシェルでは反映されないということです。環境変数は、あくまで、新たに起動したシェルで引き続き利用される変数で、グローバル変数とは異なる性質を持ちます。

 つまり、シェル変数は単一のシェル内でのみ有効であり、環境変数は関連するプロセス間で情報を共有できるようするためのものということになります。

3.環境変数を表示する

環境変数は envコマンドや printenvコマンドを使用して表示できます。

$ env   # すべての環境変数を表示
(省略)
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=:0
XDG_CURRENT_DESKTOP=GNOME-Classic:GNOME
COLORTERM=truecolor
XAUTHORITY=/run/gdm/auth-for-user01-p5Gmab/database
_=/usr/bin/printenv
$ printenv   # すべての環境変数を表示
(省略)
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=:0
XDG_CURRENT_DESKTOP=GNOME-Classic:GNOME
COLORTERM=truecolor
XAUTHORITY=/run/gdm/auth-for-user01-p5Gmab/database
_=/usr/bin/printenv

特定の環境変数を表示するには「printenv VARIABLE_NAME」と環境変数名を指定します。

$ printenv VARIABLE_NAME   # 特定の環境変数を表示

4.シェル変数と環境変数を表示する

シェル変数と環境変数を併せて表示するには、setコマンドを使用します。

$ set   # すべてのシェル変数と環境変数を表示
(省略)
HISTFILE=/home/user01/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/home/user01
HOSTNAME=localhost.localdomain
HOSTTYPE=x86_64
ID=1000
IFS=$' \t\n'
IMSETTINGS_INTEGRATE_DESKTOP=yes
IMSETTINGS_MODULE=none
(省略)

 また、「echo $VARIABLE_NAME」や「echo $SHELL_VARIABLE」のようにして、単一の変数を表示することも可能です。


 環境変数はプロセス間での情報共有に利用され、システムの構成や挙動を制御するために重要な役割を果たしています。