设置 Linux 环境变量

Geo*_*ge2 12 linux environment-variables redhat-enterprise-linux

我正在运行 Red Hat Linux Enterprise 5;我总是使用 export 命令来设置环境变量。

有没有其他设置环境变量的方法,它们的优点/缺点是什么?

Den*_*son 20

这是 Bash 手册页的摘录:

export [-fn] [name[=word]] ...
export -p
提供的名称被标记为自动导出到随后执行的命令的环境中。如果给出了 -f 选项,则名称指的是函数...

如果只需要当前环境中的变量,则不需要使用export。

var=value
Run Code Online (Sandbox Code Playgroud)

编辑:

不导出:仅当前环境。导出:当前环境和子环境。

这是导出对子环境中变量可用性的影响的演示,并且子环境中的更改不会影响父环境:

$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Run Code Online (Sandbox Code Playgroud)

第一个回波后(echo "parent..."),您看到“123”和“456”,因为双方var1var2在当前的环境是有效的。您看不到 的值,var3因为它尚未设置。

在以 " var3=..."开头的行之后,您看不到 for 的值,var1因为它没有被导出。您确实看到了一个值,var2因为它导出的。您会看到 的值,var3因为它仅为子环境设置。

(bash -c相当于运行带有-c选项参数内容的脚本。脚本或其他可执行文件,或者在这种情况下,参数bash -c成为当前环境的子项,结果当然是子项的父母。)

在“脚本”中,变量的值发生了变化。它现在输出这些新值。

一旦“脚本”完成,执行返回到父环境(在这种情况下是命令行)。在最后一个 echo 之后,您会看到原始值,因为在子环境中所做的更改不会影响父环境。