シェル変数と環境変数の違い
LinuxなどのUNIX系をやり始めると、必ず疑問に思う、シェル変数と環境変数の違いです。
まぁ違いは、誤解を恐れず超簡単に言ってしまうと・・・シェルスクリプトから見て以下の通りです。
シェル変数は、そのシェルスクリプトか、または現プロンプト上でしかアクセスが有効ではありません。
これに対して、環境変数はシェルスクリプトの入れ子はもちろん、すべてのプログラム(プロセス)からアクセスが有効なのです。
また、シェルには大きく2通り(sh系とcsh系)があり、微妙に表現が異なります。
sh系では、シェル変数をエクスポートして環境変数にしますが、csh系では、各々個々に変数を作成します。
尚、環境変数とシェル変数で同名が存在する場合は、シェル変数の値が優先されます。
sh系(シェル変数と環境変数)
$ # シェル変数セット $ var=aaa $ # シェル変数内容表示 $ echo $var $ # すべてのシェル変数を表示 $ set $ # シェル変数を環境変数にする $ export var $ # すべての環境変数の表示 $ printenv $ #シェル変数と環境変数両方消去 $ unset var
シェル変数と環境変数の違い
$ # シェル変数セット $ var=aaa $ VAR=bbb $ # シェル変数内容表示 $ echo $var $ echo $VAR $ # シェル変数を環境変数にする $ export VAR $ # ここでもう一つshを起動する $ sh $ # $varはシェル変数なので表示されない $ echo $var $ # $VARは環境変数なので表示される $ echo $VAR
csh系(シェル変数)
% # シェル変数セット % set var=aaa % # シェル変数内容表示 % echo $var % # すべてのシェル変数を表示 % set % #シェル変数消去 % unset var
csh系(環境変数)
% # 環境変数セット % setenv VAR aaa % # 環境変数内容表示 % echo $VAR % # すべての環境変数を表示 % printenv % # 環境変数消去 % unsetenv VAR
シェル変数の方が環境変数より優先
%set VAR=aaa %setenv VAR bbb %echo $VAR aaa %csh %echo $VAR bbb