Answers:
执行程序时,子程序将从父程序继承其环境变量。例如,如果在父级中$HOME
设置为/root
,则子级$HOME
变量也设置为/root
。
这仅适用于标记为导出的环境变量。如果您在命令行中像这样设置变量
$ FOO="bar"
该变量在子进程中将不可见。除非您将其导出:
$ export FOO
您可以在bash中将这两个语句合并为一个语句(但在老式的sh中则不能):
$ export FOO="bar"
这是一个简单的示例,显示了导出变量和未导出变量之间的区别。要了解正在发生的事情,请知道sh -c
创建了一个子shell进程,该进程继承了父shell的环境。
$ FOO=bar
$ sh -c 'echo $FOO'
$ export FOO
$ sh -c 'echo $FOO'
bar
注意:要获取有关shell内置命令的帮助,请使用help export
。Shell内置命令是Shell的一部分,而不是像这样的独立可执行文件/bin/ls
。
Unix系统
命令env,set和printenv显示所有环境变量及其值。env和set还用于设置环境变量,通常直接合并到shell中。通过将变量名作为命令的唯一参数,printenv也可以用于打印单个变量。
在Unix中,也可以使用以下命令,但是这些命令通常取决于特定的shell。
export VARIABLE=value # for Bourne, bash, and related shells
setenv VARIABLE value # for csh and related shells
你可以看看这个在
VARIABLE=value; export VARIABLE
而不是立即分配和导出。set
C Shell中的命令用于shell变量而不是环境变量。setenv
是的对应项export
。set
Bourne派生的shell中的命令将打印所有变量,而不仅仅是输出(环境)变量。至少env
从历史上看,该命令与外壳程序(不是内置程序)是分开的,尽管可以轻松地将其制成内置程序。它为特定命令设置环境,而不是为运行该命令的外壳设置环境。
export
是bash
shell和其他Bourne shell变体的内置命令。它用于标记要导出到子进程的shell变量。