exportした変数(環境変数)とシェル変数の動作の違い †
bashシェルを使用してexportした変数(環境変数)とシェル変数の動作の違いを以下に記します。
OSはCentOSを使用しました。
関連資料 †
シェル変数を設定してみる †
端末を起動し、下記の順序でシェル変数を設定して新しく起動したプロセスからシェル変数が参照できるかを確認します。
- シェル変数ABCにALPHABETを代入し確認
[sakura@centos6 ~]$ ABC=ALPHABET
[sakura@centos6 ~]$ echo $ABC
- 以下に記す簡単なシェルスクリプトを作成し実行する(同一端末上で実行)
出力を見ると、env1.sh上の$ABCは何も表示されません。
最後に端末上でecho $ABCを実行すると設定した値であるABCが表示されます。
[sakura@centos6 ~]$ cat env1.sh
#!/bin/bash
echo $ABC
[sakura@centos6 ~]$ chmod +x env1.sh
[sakura@centos6 ~]$ ./env1.sh
[sakura@centos6 ~]$ echo $ABC
ALPHABET
上記のことからわかるように、同一プロセス上でシェル変数が有効になっているのがわかります。
環境変数(exportした変数)を使用してみる †
端末を起動し、下記の順序で環境変数を設定して新しく起動したプロセスから環境変数が参照できるかを確認します。
- 環境変数AIUEOにJAPANESEを代入して確認
[sakura@centos6 ~]$ export AIUEO=JAPANESE
[sakura@centos6 ~]$ echo $AIUEO
JAPANESE
- 上記のシェル変数でも使用した簡単なシェルスクリプト(env.sh)を起動してみます。
- 以下に記す簡単なシェルスクリプトを作成し実行する(同一端末上で実行)
出力を見ると、env2.sh上の$AIUEOはexportで指定したJAPANESEが表示されます。
[sakura@centos6 ~]$ cat env2.sh
#!/bin/bash
echo $AIUEO
[sakura@centos6 ~]$ chmod +x env2.sh
[sakura@centos6 ~]$ ./env2.sh
JAPANESE
尚、別端末を起動し、env2.shを起動しても環境変数(AIUEO)は表示されません。
C言語での環境変数の値を取得する †
以下のC言語のサンプルは、環境変数AIUEOを取得するサンプルです。
getenv関数により環境変数を取得することができます。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *env;
env = getenv( "AIUEO" );
printf( "%s¥n", env );
return 0;
}