オペレーティングシステムが持っている、情報共有の機構の一つ。
タスク(プロセス)に情報を与え、その動作を変更するために用いられている。
環境変数は、変数名=内容、という関係を文字列で設定して用いるシンプルな機構である。
もともとはUNIXで使われており、これがCP/Mを経てMS-DOS、Windowsでも使われるようになった。
UNIXが由来であることからシェルとコマンドラインのソフトウェアから使われることが多いが、実際はGUIアプリケーションであっても利用できる。
UNIXでは、環境変数に対してシェル変数というものもあり、これは当該のシェル内のみで有効な変数である。環境変数はシェルから起動されるプロセス(子プロセス)にも継承されるが、シェル変数は継承されない。つまり、シェル変数と環境変数の最大の違いは、その有効範囲である。
Bシェル系の場合、シェル変数と環境変数は殆ど一体化しており、シェル変数をエクスポート(外部公開)したものが環境変数となる。
一方、Cシェル系ではシェル変数と環境変数は全く異なるものとして扱っており、変数の設定や削除のコマンドも別に用意されている。
取得/設定API
BSDやPOSIXでは、getenv()とsetenv()という関数で環境変数の取得と設定が可能である。
この関数はWindowsでも利用できるが、WindowsではさらにAPI関数としてGetEnvironmentVariable()とSetEnvironmentVariable()を用意している。
UNIXシェル
コマンドラインからの操作方法は以下のとおり。変数名はVERであるものとする。
Bシェル系
様々な箇所で自動的に登録されるが、ユーザーが独自に必要な設定は、~/.bashrc に記述する事が多い。
- シェル変数を設定 (変数VERにdataを設定する)
- VER=data
- シェル変数を環境変数にする
- export VER
- シェル変数と環境変数を同時設定する
- export VER=data
- 環境変数(とシェル変数)を削除する
- unset VER
- 環境変数を確認する
- printenv
Cシェル系
- 環境変数を設定 (変数VERにdataを設定する)
- setenv VER test
- 環境変数を削除
- unsetenv VER
- 環境変数を確認する
- printenv
MS-DOSシェル
MS-DOSおよびWindowsのコマンド プロンプトでは、シェル変数というものはなく、環境変数のみがある。
- 環境変数を設定 (変数VERにdataを設定する)
- SET VER=test
- 環境変数を削除 (=の後に内容がないと削除となる)
- SET VER=
- 環境変数を確認する (引数なしで実行すると一覧表示となる)
- SET
コマンドによる設定は一時的なもので、Windowsでは、システム環境変数とユーザー環境変数を、コントロールパネルから設定する。
MS-DOSおよびWindowsのコマンド プロンプトで代表的な環境変数は次のとおりである(大文字と小文字は同一視される)。
- COMSPEC
- コマンドシェル(COMMAND.COM)のフルパス。CONFIG.SYSのSHELL行が反映されるが、さもなくば未設定となる。(例) C:\COMMAND.COM
- PATH
- 実行ファイルを検索する対象となるディレクトリ。セミコロンで区切って複数指定できる。
- PROMPT
- プロンプトの設定。設定が無い場合、PC-DOSと古いMS-DOSは PROMPT=$n$g の動作をする。新しいMS-DOSは標準で PROMPT=$p$g
- TEMP または TMP
- テンポラリファイルを置くためのディレクトリ。DOS時代はRAMディスクがよく使われた。
その他、アプリケーションがよく使うもの。
- TZ
- タイムゾーンと時差を指定する。DOSにはタイムゾーン管理機能がなかったため環境変数を用いた (例) JST-9
- INCLUDE
- Cコンパイラーが使う、Cのヘッダーファイルのあるディレクトリ
- LIB
- Cコンパイラーが使う、Cのライブラリファイルのあるディレクトリ
Windows 7で標準的に使われている主な環境変数は次のとおりである。一覧はsetコマンドで表示される。
- ALLUSERSPROFILE
- (例) C:\ProgramData
- APPDATA
- (例) C:\Users\username\AppData\Roaming
- CommonProgramFiles
- 共有コンポーネントフォルダー (例) C:\Program Files\Common Files
- CommonProgramFiles(x86)
- 共有コンポーネントフォルダー (例) C:\Program Files (x86)\Common Files
- CommonProgramW6432
- 共有コンポーネントフォルダー (例) C:\Program Files\Common Files
- COMPUTERNAME
- コンピューター名
- ComSpec
- シェルのフルパス。MS-DOSと同じ (例) C:\Windows\system32\cmd.exe
- HOMEDRIVE
- ホームフォルダーのドライブレター (例) C:
- HOMEPATH
- ホームフォルダーのフォルダー (例) \Users\username
- LOCALAPPDATA
- (例) C:\Users\username\AppData\Local
- LOGONSERVER
- 現在ログオンしているドメインコントローラー (例) \hogehoge
- NUMBER_OF_PROCESSORS
- 現在のプロセッサーの数(実際にはコア数、HTT有効時はコア数の倍になる) (例) 8
- OS
- OSの種類 (例) Windows_NT
- PATHEXT
- 拡張子が省略された時に候補とする拡張子のリスト (例) .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
- PROCESSOR_ARCHITECTURE
- プロセッサーの種類 (例) AMD64
- PROCESSOR_IDENTIFIER
- プロセッサーの種類 (例) Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
- PROCESSOR_LEVEL
- プロセッサーの種類 (例) 6
- PROCESSOR_REVISION
- プロセッサーの種類 (例) 2a07
- ProgramData
- (例) C:\ProgramData
- ProgramFiles
- (例) C:\Program Files
- ProgramFiles(x86)
- (例) C:\Program Files (x86)
- ProgramW6432
- (例) C:\Program Files
- PROMPT
- プロンプトの設定。MS-DOSと同じ (例) $P$G
- PUBLIC
- PUBLICフォルダーのパス (例) C:\Users\Public
- SESSIONNAME
- (例) Console
- SystemDrive
- Windowsのインストールされているドライブ (例) C:
- SystemRoot
- Windowsのパス (例) C:\Windows
- TEMP または TMP
- (例) C:\Users\username\AppData\Local\Temp
- USERDOMAIN
- 現在ログオンしているドメイン名
- USERNAME
- 現在ログオンしているユーザー名
- USERPROFILE
- (例) C:\Users\username
- windir
- Windowsのパス (例) C:\Windows
FreeBSDでよく使われている主な環境変数は次のとおりである。一覧はenvコマンドで表示される。
- EDITOR
- エディター (例) vi
- GROUP
- ログイン中のユーザーのグループ名
- HOME
- ホームディレクトリー (例) /www/home/username
- HOSTTYPE
- ホストの種類 (例) FreeBSD
- LOGNAME
- ログイン中のユーザー名
- MAIL
- ログイン中のユーザーのboxファイル (例) /var/mail/username
- MACHTYPE
- マシンの種類 (例) x86_64
- OSTYPE
- OSの種類 (例) FreeBSD
- PAGER
- ページャー (例) more
- PATH
- 実行ファイルを検索する対象となるディレクトリ。コロン(:)で区切って複数指定できる。
- PWD
- カレントディレクトリ (例) /home/username
- SHELL
- 使用中のシェル (例) /bin/tcsh
- TERM
- 使用中のターミナル (例) xterm
- USER
- ログイン中のユーザー名
- VENDOR
- プロセッサーのベンダー (例) amd
Linuxでよく使われている主な環境変数は次のとおりである。基本的にはFreeBSDと同じだが、異なるものもある。一覧はenvコマンドで表示される。
- ftp_proxy
- FTPのプロクシー。(例) ftp://username:pass@192.0.2.123:8080
- HOME
- ホームディレクトリー (例) /home/username
- http_proxy
- HTTPのプロクシー。(例) http://username:pass@192.0.2.123:8080
- https_proxy
- HTTPSのプロクシー。(例) https://username:pass@192.0.2.123:8080
- LANG
- 言語とエンコード名 (例) ja_JP.utf8
- LOGNAME
- ログイン中のユーザー名
- no_proxy および NO_PROXY
- プロクシーを使用しないホスト名やIPアドレスの指定。カンマ(,)で区切って複数指定可能
- PATH
- 実行ファイルを検索する対象となるディレクトリ。コロン(:)で区切って複数指定できる。
- PWD
- カレントディレクトリ (例) /home/username
- SHELL
- 使用中のシェル (例) /bin/bash
- TERM
- 使用中のターミナル (例) xterm
- USER
- ログイン中のユーザー名
- USERNAME
- ログイン中のユーザー名
関連する用語
シェル変数