很难承认,但我从来没有真正理解export
环境变量到底有什么作用。我知道如果我不导出变量,有时我无法在子进程中看到它,但有时似乎可以。当我说
export foo=5
什么时候我不应该导出变量?
答案1
从man bash
:
环境
当程序被调用时,它会被赋予一个字符串数组,称为环境。这是一个名称-值对列表,形式为名称=值。
shell 提供了多种操作环境的方法。在调用时,shell 会扫描自己的环境并为找到的每个名称创建一个参数,并自动将其标记为导出到子进程。执行的命令会继承环境。和
export
命令declare -x
允许在环境中添加和删除参数和函数。如果修改了环境中参数的值,新值将成为环境的一部分,取代旧值。任何执行的命令继承的环境都由 shell 的初始环境组成,其值可以在 shell 中修改,减去命令删除的任何对unset
,加上通过导出和declare -x
命令添加的任何内容。
答案2
导出的变量会传递给子进程,未导出的变量则不会。
答案3
当您使用时export
,您将变量添加到调用导出命令的 shell 的环境变量列表中,并且 shell 的所有环境变量都传递给子进程,这就是您可以使用它的原因。
当你完成 shell 时,它的环境会被销毁,这就是为什么在登录时声明和导出环境变量的原因,例如在 .bashrc 文件中