我知道这VARIABLE=value会创建一个环境变量,并export VARIABLE=value使其可用于当前 shell 创建的进程。env显示当前的环境变量,但它们住在哪里?什么包含环境变量(或environment,就此而言)?
试图了解 Linux(具体是 Ubuntu 13.04)中环境的行为,我发现在不同的情况下,在不同的上下文中使用或定义了设置环境变量。例如,如果我检查, locale,我会得到:
$ locale
LANG=en_US.UTF-8
LANGUAGE=es_ES:es_HN:es_EC:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=es_ES.UTF-8
// more output
Run Code Online (Sandbox Code Playgroud)
但是,如果我发现,例如,LC_CTYPE使用env | grep "LC_CTYPE",它不会发送任何输出。一般来说,locale向我展示了 13 个LC_*变量,但env只有 9 个:
$ locale | grep "LC_*" | wc -l
13
$ env | grep "LC_*" | wc -l
9
Run Code Online (Sandbox Code Playgroud)
其他具有不同“性质”的变量是PS1. 例如:
$ env | grep "PS1" # No output, but...
$ set | grep "PS1" | head -n 1
PS1=$'\\[\\033[1;33m\\][\\t][\\W]\342\230\233\\[\\033[0m\\] '
Run Code Online (Sandbox Code Playgroud)
当然,PS1在我当前的环境中是一个定义明确的变量,因为我看到我的提示相应地改变了。
在其他上下文中查看 …