envまたはprintenvの出力にロケール変数が表示されないのはなぜですか?

envまたはprintenvの出力にロケール変数が表示されないのはなぜですか?

このlocaleコマンドは、ユーザーのロケールに関する情報を含む環境変数のリストを印刷します。

$locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

printenvまたは、実行時にこれらの変数が表示されないのはなぜですかenv

答え1

localeコマンド確かに環境変数を印刷します。環境によって設定されているか推論によって設定されているかに関係なく、ユーザーロケールのステータスを印刷します。

たとえば、LC_TIME設定しないと、その値はから取得されますLANG。設定すると、LC_ALL他のすべての設定が上書きされます。

試してみてください:

$ LANG=ja_JP.utf8 locale
LANG=ja_JP.utf8
LANGUAGE=en_GB:en
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=

$ LANG=ja_JP.utf8 LC_CTYPE=en_GB.UTF-8 locale
LANG=ja_JP.utf8
LANGUAGE=en_GB:en
LC_CTYPE=en_GB.UTF-8
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=

$ LANG=ja_JP.utf8 LC_CTYPE=en_GB.UTF-8 LC_ALL=POSIX locale
LANG=ja_JP.utf8
LANGUAGE=en_GB:en
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=POSIX

計算された値は二重引用符で示されますが、環境変数によって明示的に設定された値は引用符で囲まれていないことがわかります。

関連情報