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

目次

シェル変数とは

COLOR1="red"
echo $COLOR1

シェル変数はそのシェル内のみ有効です。

1行目は、シェル変数COLOR1に値のredをセットしています。
2行目は、echoで変数の値を表示します。変数の前にドルマーク($)をつけます。

環境変数とは

COLOR1="red"
export COLOR1
echo $COLOR1
env | grep COLOR1

シェル変数をexportすると環境変数になります。
環境変数は子プロセスからも参照できます。

1行目は、シェル変数COLOR1に値のredをセットしています。
2行目は、exportでCOLOR1を環境変数にしています。
3行目は、echoで変数の値を表示します。変数の前にドルマーク($)をつけます。
4行目のenvコマンドとgrepからも変数の値を表示できます。

環境変数の挙動の確認

最初にシェル変数に値を入れ、exportして環境変数にします。

$ COLOR1="red"
$ echo $COLOR1
red
$ env | grep COLOR1
$
$ export COLOR1
$
$ env | grep COLOR1
COLOR1=red
$ bash
$ echo $COLOR1
red
$ env | grep COLOR1
COLOR1=red
$
$ COLOR1="blue"
$ echo $COLOR1
blue
$ env | grep COLOR1
COLOR1=blue
$ exit
exit
$ echo $COLOR1
red
$ env | grep COLOR1
COLOR1=red
$

10行目は、bashコマンドで子プロセスになります。
11,12行目は、子プロセスでも2,3行目と同じ値が表示されます。
16行目は、値を変更しました。
21行目で、子プロセスを終了します。
23,24行目は、16行目の変更は反映されていません。

シェル変数の確認

$ COLOR2="green"
$ echo $COLOR2
green
$ bash
$ echo $COLOR2

$ exit
exit
$ echo $COLOR2
green
$

2行目は、シェル変数の値を表示しています。
4行目は、bashコマンドで子プロセスになります。
5行目の子プロセスでは、シェル変数の値は表示されません。
9行目の親プロセスではシェル変数の値は表示されます。

子プロセスになったbashを確認

bashコマンドは子プロセスになります。
psコマンドで親子関係を確認します。

$ ps -ef | head -1 && ps -ef | grep bash
UID         PID   PPID  C STIME TTY          TIME CMD
test       2954   2943  0 04:25 pts/0    00:00:00 bash
test       3670   2954  0 04:43 pts/0    00:00:00 bash
$ 

3行目のPIDの2954が親です。
4行目のPIDの3670が子です。
4行目のPPIDは2954の親プロセスを指します。

環境変数のPATHの確認

echo $PATH
env | grep PATH

echo $PATHまたはenv | grep PATHで確認できます。

$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/test/.local/bin:/home/test/bin
$
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/test/.local/bin:/home/test/bin

コロン(:)で区切られています。

主なパスの役割

ディレクトリ 説明
/bin 基本のコマンドあり
/sbin 管理者用のコマンドあり
/usr/bin アプリが使用する基本のコマンドあり
/usr/sbin アプリが使用する管理者用のコマンドあり
/usr/local/bin 外部アプリのコマンドが配置される
/usr/local/sbin 外部アプリの管理者用のコマンドが配置される

関連の記事

CentOS コマンド一覧 (Linux)

△上に戻る