sha*_*ant 10 shell environment-variables
在 Bash 中键入以下内容:
env | grep USER
Run Code Online (Sandbox Code Playgroud)
和
set | grep USER
Run Code Online (Sandbox Code Playgroud)
给两次相同的用户名。
我怎么知道,例如在输入时echo $USER是否显示了 shell 或环境变量?
ilk*_*chu 14
对于POSIX 兼容的 shell(包括 Bash),标准说:
2.5.3 Shell 变量
变量应从环境中初始化[...] 如果变量是从环境中初始化的,则应立即将其标记为导出;请参阅内置的导出特殊功能。可以使用变量赋值来定义和初始化新变量,[等]
而关于export:
export name[=word]...
shell 应为与指定名称对应的变量赋予导出属性,这将使它们处于后续执行命令的环境中。
所以从shell的角度来看,只有变量。其中一些可能来自 shell 启动时的环境,而其中一些可能导出到 shell 启动的进程的环境中。
(“环境”实际上只是在启动时传递给进程的一堆字符串。当进程运行时,它可以随心所欲地使用它,使用它,忽略它,覆盖它。以及进程传递的内容何时启动其他进程可能是另一回事,当然,通常只需再次传递所有环境变量。)
如果您使用的是一些非 POSIX shell,例如csh,情况可能会有所不同:
$ csh
% echo $foo
foo: Undefined variable.
% setenv foo bar
% echo $foo
bar
% set foo=asdf
% echo $foo
asdf
% env |grep foo
foo=bar
% exit
Run Code Online (Sandbox Code Playgroud)