新Linux入門|環境変数を理解しよう!シェル変数との違いと確認コマンド


🌱 環境変数を理解しよう!シェル変数との違いと確認コマンド

 Linuxでは、システムやシェルの動作を柔軟に制御するために「変数」という仕組みが用意されています。
 その中でも、環境変数(Environment Variables) は、プロセス間で情報を共有するためのとても重要な存在です。

この記事では、環境変数とシェル変数の違い
そして 確認に使う便利なコマンド について、実際の操作例を交えて詳しく説明します。

💡 シェル変数と環境変数の違い

Linuxでは、変数には大きく分けて「シェル変数」と「環境変数」の2種類があります。
どちらも「名前=値」の形で情報を保持しますが、有効範囲(スコープ) が異なります。

種類有効範囲継承関係説明
シェル変数現在のシェルの中だけで有効子プロセスには引き継がれない一時的に使うローカルな変数
環境変数現在のシェルと、その子プロセスにも有効子プロセスに引き継がれるシステム全体やアプリの設定に利用される

💬 ポイント

  • シェル変数は 「自分のシェルだけ」
  • 環境変数は 「自分のシェル+起動したプログラムや子プロセス」 でも参照できます。

🧭 シェル変数と環境変数を確認する例

ここで、実際のコマンド操作で違いを見てみましょう。

➀ シェル変数を作成して確認

[suzuki@AlmaLinux ~]$ shell_var='shell var'
[suzuki@AlmaLinux ~]$ echo $shell_var
shell var

💬 この変数は現在のシェルでのみ有効です。

② 環境変数を作成して確認

[suzuki@AlmaLinux ~]$ export env_var='env var'
[suzuki@AlmaLinux ~]$ echo $env_var
env var

💬 export コマンドを使うことで、環境変数として登録されました。

③ 子シェルで確認

[suzuki@AlmaLinux ~]$ bash    # 新しいシェルを起動
[suzuki@AlmaLinux ~]$ echo $shell_var
                      # ← シェル変数は引き継がれない
[suzuki@AlmaLinux ~]$ echo $env_var
env var               # ← 環境変数は引き継がれる
[suzuki@AlmaLinux ~]$ exit
exit

💬 このように、環境変数は子シェルでも利用できますが、
シェル変数は親シェルの中だけで完結します。

🧩 シェル変数と環境変数の関係

# シェル変数の設定
$ 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      # 値の変更が反映されていない
$ exit

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

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

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

🧾 環境変数を確認するコマンド

環境変数の一覧や内容を確認するには、envprintenv コマンドを使います。

コマンド説明
envすべての環境変数を一覧表示する。
printenv特定の環境変数やすべての環境変数を表示する。
setシェル変数と環境変数を両方まとめて表示する。

📘 使用例

[suzuki@AlmaLinux ~]$ env
SHELL=/bin/bash
USER=suzuki
HOME=/home/suzuki
LANG=ja_JP.UTF-8
PATH=/usr/local/bin:/usr/bin:/bin

💬 env は環境変数だけを一覧表示します。
長く表示されるため、grep と組み合わせると便利です。

[suzuki@AlmaLinux ~]$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin

🧮 特定の環境変数を表示する

printenv コマンドに変数名を指定すると、その値だけを表示できます。

📘 使用例

[suzuki@AlmaLinux ~]$ printenv HOME
/home/suzuki
[suzuki@AlmaLinux ~]$ printenv SHELL
/bin/bash

💬 printenv はスクリプト内で環境変数を扱うときにもよく使われます。

🧠 シェル変数と環境変数を両方確認する

シェル変数も含めて全ての変数を見たい場合は、set コマンドを使います。

📘 使用例

[suzuki@AlmaLinux ~]$ set
BASH=/bin/bash
BASHOPTS=cmdhist:expand_aliases:interactive_comments
BASH_VERSION='5.1.8(1)-release'
HOME=/home/suzuki
HOSTNAME=AlmaLinux
PATH=/usr/local/bin:/usr/bin:/bin
shell_var='shell var'

💬 この出力では、shell_var(シェル変数)とPATH(環境変数)が両方表示されています。

🧩 よく使われる主な環境変数一覧

変数名説明
PATHコマンド検索パスを指定/usr/local/bin:/usr/bin:/bin
HOMEホームディレクトリを指定/home/suzuki
SHELL使用中のシェル/bin/bash
LANGシステムの言語設定ja_JP.UTF-8
USER現在のユーザー名suzuki
HOSTNAMEホスト名AlmaLinux
TERMターミナルの種類xterm-256color

💬 これらはシステムが自動的に設定している環境変数で、
Linuxの動作やアプリケーション設定に深く関係しています。

🧭 exportコマンドで環境変数を登録

シェル変数を環境変数に変換するときには、export コマンドを使います。

📘 コマンド書式

export 変数名=値

📘 使用例

[suzuki@AlmaLinux ~]$ export MY_APP_MODE=production
[suzuki@AlmaLinux ~]$ printenv MY_APP_MODE
production

💬 export で登録した変数は、サブシェルや他のプログラムからも参照可能になります。

🖥️ 環境変数の永続化

一時的に設定した環境変数は、ターミナルを閉じると消えてしまいます。
永続的に使いたい場合は、ホームディレクトリの設定ファイルに記述します。

ファイル名内容適用タイミング
~/.bashrcシェル起動時に毎回読み込まれる対話的シェルを開いたとき
~/.bash_profileログイン時に読み込まれるログインシェル
/etc/profileシステム全体の設定すべてのユーザーに適用

📘 例

[suzuki@AlmaLinux ~]$ vi ~/.bashrc
export MY_APP_MODE=production

設定を反映させるには、再ログインするか次のコマンドを実行します。

[suzuki@AlmaLinux ~]$ source ~/.bashrc

✅ まとめ

  • シェル変数 はそのシェル内だけで有効。
  • 環境変数 は子プロセスにも引き継がれる。
  • 環境変数の確認には envprintenv
    両方見たい場合は set コマンドが便利。
  • 永続化したいときは .bashrc.bash_profile に設定を書く。

💬 Linuxでは環境変数を理解すると、システム設定やスクリプト制御がぐっと楽になります。
ぜひ、自分の作業環境に合わせて環境変数を上手に活用してみましょう!