環境変数の紹介
基本的な変数を理解したので、環境変数を探求しましょう。環境変数は、シェルの任意の子プロセスに利用可能な変数です。これは、そのシェルから実行されるスクリプトやプログラムがアクセスできることを意味します。
-
現在のすべての環境変数を表示するには、env
コマンドを使用します。
env
これにより、長い変数の一覧が表示されます。まだすべてを理解していなくても心配しないでください。後で最も重要なもののいくつかを説明します。
-
最も重要な環境変数の 1 つは PATH
です。見てみましょう。
echo $PATH
PATH
変数は、システムが実行可能プログラムを探すディレクトリをリストしています。各ディレクトリはコロン (:
) で区切られています。
-
次に、独自の環境変数を作成しましょう。環境変数を作成するには export
コマンドを使用します。
export MY_ENV_VAR="This is an environment variable"
export
コマンドにより、子プロセスに変数が利用可能になります。これが、シェル変数と環境変数の主な違いです。
-
この違いを示すために、通常のシェル変数と環境変数の両方にアクセスしようとするシェル スクリプトを作成しましょう。
echo '#!/bin/bash
echo "Shell variable: $my_var"
echo "Environment variable: $MY_ENV_VAR"' > test_vars.sh
スクリプトを実行可能にします。
chmod +x test_vars.sh
次に、スクリプトを実行します。
./test_vars.sh
環境変数 (MY_ENV_VAR
) はアクセス可能であるのに対し、シェル変数 (my_var
) はアクセスできないことがわかるはずです。これは、my_var
がエクスポートされていないため、子プロセス(この場合はスクリプト)がそれを知らないからです。
-
MY_ENV_VAR
が現在の環境変数であることを確認するには、再度 env
コマンドを使用しますが、今回は grep
を使って出力をフィルタリングします。
env | grep MY_ENV_VAR
出力に新しい変数が表示されるはずです。
-
新しい環境変数の値を直接確認することもできます。
echo $MY_ENV_VAR
素晴らしい!これで初めての環境変数を作成し、シェル変数とどのように異なるかを確認しました。主な違いは、export
で作成された環境変数は子プロセスに利用可能であるのに対し、シェル変数はそうではないということです。
環境変数とシェル変数はそれぞれ独自のスコープを持っています。変数をエクスポートすると(たとえば export MY_ENV_VAR="something"
)、そのシェルから開始される任意のサブプロセス(たとえば同じシェルで実行されるシェル スクリプト)に利用可能になります。ただし、完全に別のシェル セッションを開いた場合、現在のシェルの変数を継承しないため、起動ファイル(たとえば .zshrc
や .bashrc
)で明示的に設定しない限りです。
言い換えると:
- 通常のシェル変数は、現在のセッション内でのみ表示されます。
- エクスポートされた変数は、そのセッションから起動される子プロセスに利用可能です。
- シェル起動ファイル(たとえば
.zshrc
)で設定された変数は、そのシェルのすべての新しいセッションに適用されます。
他のユーザーや別のシェルの変数を直接読み取ることはできません。なぜなら、各プロセスは独自の環境を維持しているからです。新しいシェルを起動すると、親のエクスポートされた変数のコピーを取得しますが、export
なしで元のシェルにのみ設定された変数は取得しません。
次の手順で、環境変数を恒久的に設定する方法を学びます。