我正在运行 Red Hat Linux Enterprise 5;我总是使用 export 命令来设置环境变量。
还有其他方法可以设置环境变量吗?它们的优点/缺点是什么?
答案1
这是 Bash 手册页的摘录:
export [-fn] [name[=word]] ...
export -p
提供的名称被标记为自动导出到后续执行的命令的环境。如果给出了 -f 选项,则名称引用函数...
如果只需要当前环境中的变量,则无需使用export。
var=value
编辑:
不导出:仅限当前环境。导出:当前环境和子环境。
这里演示了导出对子环境中变量可用性的影响,以及子环境中的更改不会影响父级:
$ 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] []
在第一个回显 ( echo "parent..."
) 之后,您会看到“123”和“456”,因为var1
和var2
在当前环境中都处于活动状态。您看不到的值,var3
因为它尚未设置。
在以“ ”开头的行之后,var3=...
您看不到值,var1
因为它没有被导出。您做看到价值,var2
因为它曾是已导出。您会看到一个值,var3
因为它是为子环境设置的仅有的。
(bash -c
相当于使用选项参数的内容运行脚本-c
。脚本或其他可执行文件,或在这种情况下,参数bash -c
成为当前环境的子级,因此,当然是子级的父级。)
在“脚本”中,变量的值已更改。它现在输出这些新值。
一旦“脚本”完成,执行将返回到父环境(在本例中为命令行)。在最后一次回显之后,您将看到原始值,因为在子环境中所做的更改不会影响父级。
答案2
你说
我总是使用导出命令来设置环境变量
顺便说一下,听起来你实际上是在问如何使环境变量持久存在。要做到这一点,你需要将语句放在export VAR="foo"
$HOME/.bash_profile 文件中(如果你使用的是 bash)。如果你希望该环境变量对除 root 之外的所有用户都持久存在,则将其添加到 /etc/profile。如果你还希望为 root 用户添加它,则将其设置在 /root/.bash_profile 中。
这将适用于所有以 bash 为首选 shell 的登录 shell。对于非登录 shell,您需要使用 .bashrc。对于其他 shell,我没有提供任何见解 :D
答案3
导出是最直接的方法,那么为什么不就这样呢?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
答案4
您还可以做这样的事情:
VAR=val application
例如:
LANG=C ls --help
以英文输出。
LANG=pl_PL ls --help
以波兰语输出(如果可用)。
过去,在 sh 中,您无法执行 export VAL=val。您必须
VAL=val; export VAL