Edited at

シェル変数と環境変数の違いをコマンドラインで確認する

More than 3 years have passed since last update.

最近、調べ直したので、この機会にまとめておきます。


はじめに


シェル変数は現在実行中のシェルだけで有効な変数ですが,環境変数はシェルから実行したコマンドにも引き継がれる変数です。

再入門 体で覚えるLinuxの基本:ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20060620/241337/


絵にすると↓な感じでしょうか。これをコマンドで確認していきます。

環境変数シェル変数.png


シェル変数の基本

「=」を使用することで変数を格納出来ます。また、変数の先頭に‘$’をつけることで、格納された値を参照出来ます。


CLI

[root@localhost ~]# echo $HOGE

[root@localhost ~]# HOGE=hogehoge
[root@localhost ~]# echo $HOGE
hogehoge


環境変数について

上記は「シェル変数」と言われ、そのシェル内でのみ有効な変数です。例えば、以下のようなシェルスクリプトを用意し、


hoge.sh

#!/bin/sh

echo ${HOGE}

実行しても、何も表示されません。


CLI

[root@localhost ~]# sh hoge.sh

  

しかし、「export」をつけると、その変数が「環境変数」となり、子プロセスでも有効になります。今度は、シェルスクリプトから変数の呼び出しに成功しています。


CLI

[root@localhost ~]# export HOGE

[root@localhost ~]# sh hoge.sh
hogehoge ←表示される


逆に子の環境変数を親に引き継ぐには

基本的には、子の環境変数を親が使うことは出来ません。

試しにシェルスクリプト内で環境変数を定義してみますが、その環境変数は親のシェルでは有効ではありません。hoge2.shを作成し、テストしてみます。


CLI

[root@localhost ~]# cat hoge2.sh

#!/bin/sh
HOGE2=hoge2
export HOGE2
[root@localhost ~]# sh hoge2.sh
[root@localhost ~]# echo $HOGE2
  ←何も表示されない

しかし、「source」コマンドを使うと、現在のシェルに環境変数を定義出来ます。


source hoge とするのは、ファイル hoge に書かれた文字列を一つずつ自分の手でタイプしたのと同じことである。

UNIXの部屋 コマンド検索:source (*BSD/Linux) http://x68000.q-e-d.net/~68user/unix/pickup?source



CLI

[root@localhost ~]# source hoge2.sh

[root@localhost ~]# echo $HOGE2
hoge2


参考


まんがでわかるLinux シス管系女子(日経BP Next ICT選書)



日経BP社 (2015-02-19)
売り上げランキング: 4,730