プロセスの実行を開始すると、exec 関数のファミリの中の 1 つが環境と 呼ばれる文字列の配列を用意します (exec(2) を参照)。規約上、これらの文字列は variable (変数) = value (値) という形式をとります (たとえば、PATH=/sbin:/usr/sbin)。この環境変数により、プログラムはプログラムの環境に関する情報を 利用できるようになります。
環境中に名前を設定するには、sh(1) における name=value 引数と export コマンドを使うか、あるいは exec(2) 関数のうちの 1 つを使います。.profile ファイル内でエクスポートされる MAIL、PS1、PS2、IFS などのシェル変数と環境変数との間で矛盾を生じさせるのは避けてください。詳細は profile(4) を参照してください。
アプリケーションが利用できる環境変数を 以下に示します。これらの変数は、実行環境において 設定されていることが期待されています。
ユーザーのログインディレクトリ名。パスワードファイル (passwd(4) を参照) に基づいて login(1) が設定します。
国際化情報を指定するのに用いる文字列。ユーザーはこの情報を利用して、さまざまな国の慣習に従って作業を進めることができます。setlocale(3C) 関数の引数 locale に "" を指定して呼び出すと、この関数は環境変数 LANG を調べます。特定のカテゴリに対する環境変数が設定されていない、あるいは空文字列 に設定されている場合は、LANG がデフォルト時のロケールとして使用されます。ただし LC_ALL が空文字列 でない正当な値に設定されていれば、変数 LANG や他の LC_* 変数の代わりにその値が使用されます。たとえば、以下のように呼び出されたとします。
setlocale(LC_CTYPE, ""),
ほとんどのコマンドは、他の処理を行う前に以下を呼び出します。
setlocale(LC_ALL, "")
以下に示す環境変数が各カテゴリの setlocale(3C) と対応しています。
空文字列でない正当な値に設定されていれば、LANG およびすべての LC_* 変数の値に代わって使用されます。
使用する文字照合順序を指定します。このカテゴリにあてはまる情報は、localedef(1) コマンドによって作成されるデータベース内に格納されています。この環境変数は strcoll(3C) および strxfrm(3C) に影響を及ぼします。
文字分類、文字変換および複数バイト文字の幅を指定します。LC_CTYPE が正当な値に設定されていると、呼び出し側のユーティリティは、当該ロケールに合った文字を含んでいるテキストやファイル名を 表示したり処理したりできます。文字の具体例としては、各文字の幅が 1 から 3 バイトの拡張 UNIX コード (EUC) 文字、およびカラム幅が 1 から 3 の EUC 文字です。デフォルトの C ロケールは、7 ビットの ASCII 文字セットに対応していて、ISO 8859-1 の文字だけが使用できます。このカテゴリにあてはまる情報は、localedef() コマンドによって作成されるデータベース内に格納されています。ctype(3C)、mblen(3C)、および他の多くのコマンド (たとえば、cat(1)、ed(1)、ls(1)、vi(1)) がこの環境変数を使用します。
使用するメッセージデータベースの言語を指定します。たとえば、アプリケーションは、フランス語用のメッセージデータベースと ドイツ語用のメッセージデータベースを使い分けることができます。メッセージデータベースは、mkmsgs(1) コマンドで作成します。exstr(1)、gettxt(1)、srchtxt(1)、gettxt(3C)、gettext(3C) がこの環境変数を使用します。
特定のロケールで使用する貨幣記号および 区切り記号を指定します。このカテゴリにあてはまる情報は、localedef(1) コマンドによって作成されるデータベース内に格納されています。localeconv(3C) がこの環境変数を使用します。
小数点および千の位の区切り記号を指定します。このカテゴリにあてはまる情報は、localedef() コマンドによって作成されるデータベース内に格納されています。デフォルト値の C ロケールは、小数点にピリオド (.) を指定し、千の位の区切り記号は指定しません。localeconv(3C)、printf(3S)、strtod(3C) がこの環境変数を使用します。
日付と時刻の書式を指定します。このカテゴリにあてはまる情報は、localedef() で指定されるデータベース内に格納されています。デフォルト値の C ロケールは、アメリカ合衆国の日付と時刻の書式に対応しています。多くのコマンドおよび関数 (たとえば、at(1)、calendar(1)、date(1)、strftime(3C)、getdate(3C)) がこの環境変数を使用します。
stderr にメッセージを表示するとき、fmtmsg がどの標準書式メッセージ構成要素を 使用するかを制御します (fmtmsg(1) および fmtmsg(3C) を参照)。
コロンで区切られたネットワーク識別子のリストです。ネットワーク識別子とは、システムの「ネットワーク選択」構成要素が、アプリケーション固有のデフォルトのネットワーク検索パスを提供するために 使用する文字列です。ネットワーク識別子は、NULL 以外の文字からなり、長さは 1 以上である必要があります。最大長は制限されていません。通常は、システム管理者が ネットワーク識別子を選択します。ネットワーク識別子は、/etc/netconfig ファイルのすべての記述項の最初のフィールドでもあります。したがって NETPATH は、/etc/netconfig ファイルへのリンクおよびそのファイルのネットワーク記述項に入っている ネットワークに関する情報を提供します。/etc/netconfig は、システム管理者によって維持されます。getnetpath(3N) で説明したライブラリルーチンが、NETPATH 環境変数にアクセスします。
メッセージカタログを見つけるために catopen(3C) と gettext(3C) が 使用する、一連のテンプレートを指定します。各テンプレートは、オプションの接頭辞、1 つまたは複数の置換フィールド、ファイル名、およびオプションの接尾辞からなります。次に例を示します。
NLSPATH="/system/nlslib/%N.cat"
この例では、catopen( ) がすべてのメッセージカタログをディレクトリ /system/nlslib から見つける必要があることを定義します。このディレクトリのカタログ名は、catopen( ) に指定された name パラメータの %N に接尾辞の .cat がついています。
置換フィールドは、後ろに単一文字のキーワードがついた % 記号からなります。現在定義されているキーワードを以下に示します。
%N | catopen( ) に指定された name パラメータの値 |
%L | LANG または LC_MESSAGES の値 |
%l | LANG または LC_MESSAGES の言語要素 |
%t | LANG または LC_MESSAGES の地域要素 |
%c | LANG または LC_MESSAGES のコードセット要素 |
%% | 単一の % 文字 |
現在定義されていない値を指定した場合は、空の文字列に置換されます。分離文字の下線文字 (_) およびピリオド (.) は、%t および %c の各置換フィールドには入っていません。
NLSPATH で定義されるテンプレートは、コロン (:) で区切られます。先頭のコロンまたは隣接する 2 つのコロン (::) は、%N と同じ意味です。次に例を示します。
NLSPATH=":%N.cat:/nlslib/%L/%N.cat"
この例では、要求されたメッセージカタログを name、name.cat、および /nlslib/$LANG/name.cat から見つけるよう catopen( ) に指示しています。gettext() の場合、%N には自動的に メッセージ が入ります。
NLSPATH が設定されていないか NULL に設定されている場合、catopen() と gettext() は setlocale(3C) を呼び出します。setlocale(3C) は LANG と LC_* 変数を調べてメッセージカタログの場所を探します。
通常、NLSPATH はシステム全体 (/etc/profile 中) に設定されるので、プログラムもユーザーも メッセージカタログの場所や命名規約を意識する必要はありません。
sh(1)、time(1)、nice(1)、nohup(1) などのユーティリティが、不完全なパス名しかわからないファイルを探すときに 使用する一連のディレクトリ接頭辞です。複数の接頭辞はコロン (:) で区切られます。login(1) は PATH=/usr/bin を設定します。詳細は、sh(1) を参照してください。
重大度レベルを定義し、文字列をその重大度レベルと対応させ、標準書式エラーメッセージで出力します (addseverity(3C)、fmtmsg(1)、fmtmsg(3C) を参照)。
出力を行う端末の種類です。vi(1) などのコマンドがこの情報を使用して、指定された端末の特殊な機能を利用できます。
時間帯の情報です。この環境変数の内容は、ctime(3C)、localtime(3C)、strftime(3C)、mktime(3C) の各関数がデフォルトの時間帯を変更するのに使用します。TZ の形式が以下に述べるものと異なる場合、/usr/share/lib/zoneinfo/ に対応する時間帯データベースへのパスを表します。このとき、最初の文字がコロン (:) の場合は無視されます。TZ の通常の形式は次のとおりです。
std offset [ dst [ offset ], [ start [ /time ], end [ /time ] ] ]
3 個以上のバイトは、標準 (std) 時間帯および 夏期 (dst) 時間帯を指定します。std は必ず指定します。dst が指定されていない場合、このロケールでは夏期時間帯は使用されません。大文字と小文字の両方を使用できます。先行するコロン (:)、数字、コンマ (,)、負符号 (-)、または正符号 (+) 以外の文字はすべて使用できます。
協定世界時に合わせるために、ローカル時間に追加すべき値を示します。offset の形式は以下のとおりです。
hh [ : mm [ : ss ] ]
分 (mm) および秒 (ss) はオプションです。時間 (hh) は必ず指定し、単一の数字で指定することもできます。std の後では必ず offset を指定しなければなりません。dst の後に offset を指定しないと、夏期時間は標準時間の 1 時間先と見なされます。1 つまたは複数の数字による指定が可能です。この値はつねに 10 進数として解釈されます。時間は 0 と 24 の間の値で、分 (および秒) を指定する場合は 0 と 59 の間の値で 指定しなければなりません。この範囲外の値を指定した場合の動作は予測できません。- を値の前につけると、時間帯はグリニッジ子午線の東です。それ以外の場合は、グリニッジ子午線の西になります (オプションの + 符号で示すこともできます)。
夏期時間帯に変更する日時と、その時間帯から標準時間帯に戻す日時を示します。start/time は、標準時間から夏期時間に変更する日時を示し、end/time は、標準時間に戻る日時を示します。各 time フィールドは、変更を行う時間 (現在のローカル時間) を示します。
start および end は、以下のいずれかの形式をとります。
ユリウス日 n (1 <= n <= 365)。うるう年は考えません。つまり毎年 2 月 28 日は 59 で、3 月 1 日は 60 となります。この書式では 2 月 29 日を扱えません。
0 から始まるユリウス日 n (1 <= n <= 365)。2 月 29 日を扱えるように、うるう年を考慮した書式です。
m 月 n 週の d 番目 (0 <= d <= 6) の日 (1 <= n <= 5, 1 <= m <= 12)。n が 5 の場合、「 m 月の最後の d 番目の日」になります (最後の d 番目の日は、月の第 4 週または第 5 週にきます)。n=1 は、その月の最初の d 番目の日が来る週を意味します。d=0 は日曜日を意味します。
これらのオプションのフィールドがない場合は、システム固有のデフォルト値を使用して start および end を指定します。
time は offset と同じ書式を用います。ただし、time では先行符号 (- または +) を付けることはできません。time フィールドがない場合のデフォルト値は 02:00:00 です。
cat(1), date(1), ed(1), fmtmsg(1), localedef(1), login(1), ls(1), mkmsgs(1), nice(1), nohup(1), sh(1), sort(1), time(1), vi(1), exec(2), addseverity(3C), catopen(3C), ctime(3C), ctype(3C), fmtmsg(3C), getdate(3C), getnetpath(3N), gettext(3C), gettxt(3C), localeconv(3C), mblen(3C), mktime(3C), printf(3S), setlocale(3C), strcoll(3C), strftime(3C), strtod(3C), strxfrm(3C), TIMEZONE(4), netconfig(4), passwd(4), profile(4)