小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

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

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