Linuxの環境変数とシェル変数の違いのサンプルです。(Linux,CentOS7)
目次
サンプル | シェル変数とは |
環境変数とは | |
環境変数の挙動の確認 | |
シェル変数の確認 | |
子プロセスになったbashを確認 | |
環境変数のPATHの確認 |
シェル変数とは
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して環境変数にします。
[test@localhost ~]$ COLOR1="red"
[test@localhost ~]$ echo $COLOR1
red
[test@localhost ~]$ env | grep COLOR1
[test@localhost ~]$
[test@localhost ~]$ export COLOR1
[test@localhost ~]$
[test@localhost ~]$ env | grep COLOR1
COLOR1=red
[test@localhost ~]$ bash
[test@localhost ~]$ echo $COLOR1
red
[test@localhost ~]$ env | grep COLOR1
COLOR1=red
[test@localhost ~]$
[test@localhost ~]$ COLOR1="blue"
[test@localhost ~]$ echo $COLOR1
blue
[test@localhost ~]$ env | grep COLOR1
COLOR1=blue
[test@localhost ~]$ exit
exit
[test@localhost ~]$ echo $COLOR1
red
[test@localhost ~]$ env | grep COLOR1
COLOR1=red
[test@localhost ~]$
10行目は、bashコマンドで子プロセスになります。
11,12行目は、子プロセスでも2,3行目と同じ値が表示されます。
16行目は、値を変更しました。
21行目で、子プロセスを終了します。
23,24行目は、16行目の変更は反映されていません。
シェル変数の確認
[test@localhost ~]$ COLOR2="green"
[test@localhost ~]$ echo $COLOR2
green
[test@localhost ~]$ bash
[test@localhost ~]$ echo $COLOR2
[test@localhost ~]$ exit
exit
[test@localhost ~]$ echo $COLOR2
green
[test@localhost ~]$
2行目は、シェル変数の値を表示しています。
4行目は、bashコマンドで子プロセスになります。
5行目の子プロセスでは、シェル変数の値は表示されません。
9行目の親プロセスではシェル変数の値は表示されます。
子プロセスになったbashを確認
bashコマンドは子プロセスになります。
psコマンドで親子関係を確認します。
[test@localhost ~]$ 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
[test@localhost ~]$
3行目のPIDの2954が親です。
4行目のPIDの3670が子です。
4行目のPPIDは2954の親プロセスを指します。
環境変数のPATHの確認
echo $PATH |
env | grep PATH |
echo $PATHまたはenv | grep PATHで確認できます。
[test@localhost ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/test/.local/bin:/home/test/bin
[test@localhost ~]$
[test@localhost ~]$ 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 | 外部アプリの管理者用のコマンドが配置される |
関連の記事