このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linux基礎:シェル変数と環境変数

シェル変数と環境変数
Linux のシェルは、ユーザーとシステムの橋渡しをする重要な仕組みです。その動作やユーザーの作業環境を制御するために使われるのが「変数」です。シェルには シェル変数 と 環境変数 の2種類があり、それぞれに役割や適用範囲が異なります。
シェル変数は「現在のシェルだけで有効な変数」、環境変数は「現在のシェルから派生する子シェルや実行されるプログラムにも引き継がれる変数」です。たとえば、コマンド検索パスを示す PATH やユーザー名を保持する USER などは環境変数であり、Linux の操作に不可欠です。
ここでは、シェル変数と環境変数の違い、その設定・確認方法、利用できる主なコマンドについて具体例を交えながら詳しく解説します。

1.シェル変数と環境変数の概要
1.1. 変数の役割
シェルでは、言語設定、作業ディレクトリ、プロンプトの表示形式など、ユーザーの操作に必要な情報が変数に保存されます。
代表的な変数を以下にまとめます。
| 変数 | 説明 |
|---|---|
| HOME | ユーザーのホームディレクトリ |
| HOSTNAME | システムのホスト名 |
| LANG | 利用する言語や文字コード |
| PATH | コマンド検索ディレクトリのリスト |
| PS1 | シェルのプロンプト表示形式 |
| PWD | 現在の作業ディレクトリ |
| UID | ユーザーID |
| USER | ユーザー名 |
これらはシェルやシステムが利用する基本的な変数であり、環境のカスタマイズにも活用されます。
1.2. 変数の種類
- シェル変数
設定したシェルの中でのみ有効。シェルを終了すると値は消える。 - 環境変数
exportコマンドで設定することで、起動した子シェルや実行するコマンドにも引き継がれる。
図にすると以下のようになります。
[親シェル] var=Linux (シェル変数)
└─ 子シェル: 参照できない
[親シェル] export world=Linux (環境変数)
└─ 子シェル: 参照できる2.変数の基本操作
2.1. 変数の設定と参照
変数を設定する書式は次の通りです。
変数名=値注意点として「= の前後にスペースを入れない」ことがあります。
例:変数の設定と参照
[user@rocky9 ~]$ var=Linux
[user@rocky9 ~]$ echo $var
Linux 変数名を参照する際は「$変数名」と書きます。大文字・小文字は区別されるため、$VAR と入力しても値は表示されません。
2.2. シェル変数の有効範囲
[user@rocky9 ~]$ var=Linux
[user@rocky9 ~]$ echo $var
Linux
[user@rocky9 ~]$ bash ←プロンプトが変わらないが、新しいサブシェルが起動している
[user@rocky9 ~]$ echo $var
(何も表示されない)
[user@rocky9 ~]$ exit ←exitしても終了しない。それは新しく起動したサブシェルが終了しただけなので
exit
[user@rocky9 ~]$ echo $var
Linux
[user@rocky9 ~]$ exit ←もう一度、exit するとシェルが終了する(ターミナルが閉じる)シェル変数は、そのシェルの中だけで有効であることがわかります。
上で行ったコマンド操作を表したものが下図です。

3.環境変数の操作
3.1. export コマンド
環境変数を設定するには export を利用します。
書式
export [変数名[=値]]例:環境変数の設定
[user@rocky9 ~]$ VAR1=Rocky
[user@rocky9 ~]$ export VAR1
[user@rocky9 ~]$ export VAR2=Linuxこれにより VAR1 と VAR2 が環境変数として有効になります。
3.2. シェル変数と環境変数の違い
[user@rocky9 ~]$ local=Ubuntu
[user@rocky9 ~]$ world=Rocky
[user@rocky9 ~]$ export world
[user@rocky9 ~]$ bash ←プロンプトが変わらないが、新しいシェルが起動している
[user@rocky9 ~]$ echo $local
(何も表示されない)
[user@rocky9 ~]$ echo $world
Rocky
[user@rocky9 ~]$ exit ←exitしても終了しない。それは新しく起動したサブシェルが終了しただけなので
exit
[user@rocky9 ~]$この例から、環境変数は子シェルに引き継がれるが、シェル変数は引き継がれないことがわかります。
上で行ったコマンド操作を表したものが下図です。

4.変数を確認するコマンド
4.1. echo
変数の内容を確認する基本コマンドです。
| コマンド | 書式 | 説明 |
|---|---|---|
| echo | echo $変数名 | 指定した変数の内容を表示 |
4.2. printenv
環境変数を一覧表示します。
使用例
[user@rocky9 ~]$ printenv | head -5
SHELL=/bin/bash
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/2143,unix/unix:/tmp/.ICE-unix/2143
COLORTERM=truecolor
HISTCONTROL=ignoredups
XDG_MENU_PREFIX=gnome-4.3. env
printenv と同様に環境変数を表示できます。
4.4. set
シェル変数と環境変数をすべて表示します。
使用例
出力が非常に多いので、grep コマンドで絞り込みをします。
[user@rocky9 ~]$ set | grep HOME
HOME=/home/user
local -a dirs=(${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions);
[ "$PWD" != "$HOME" ] && pwd=${PWD/#$HOME\//\~\/};
i="$HOME/.ssh/$i";まとめ
- シェル変数 は設定したシェルのみで有効。
- 環境変数 は
exportで設定することで子シェルや実行コマンドに引き継がれる。 - 代表的な変数には
PATH,HOME,USER,PWDなどがある。 - 変数の確認には
echo,printenv,env,setを使う。
シェル変数と環境変数の違いを理解し、適切に活用することで、Linux の作業環境を自在にカスタマイズすることが可能になります。
