在 .bashrc 中设置环境变量的最佳方法是什么?

Flá*_*iro 11 linux shell bash environment-variables

在 中设置变量时.bashrc,我应该使用它吗?

export VAR=value
Run Code Online (Sandbox Code Playgroud)

或者这就足够了吗?

VAR=value
Run Code Online (Sandbox Code Playgroud)

到底有什么区别(如果有的话)?

agn*_*nul 17

最好的方法

export VAR=value
Run Code Online (Sandbox Code Playgroud)

区别

正在做

VAR=value
Run Code Online (Sandbox Code Playgroud)

只在脚本的持续时间内设置变量(.bashrc在这种情况下)。脚本的子进程(如果有)不会定义 VAR,并且一旦脚本退出VAR就消失了。

export VAR=value
Run Code Online (Sandbox Code Playgroud)

显式添加VAR到传递给子进程的变量列表。想试试吗?打开一个外壳,做

PS1="foo > "
bash --norc
Run Code Online (Sandbox Code Playgroud)

新 shell 获得默认提示。如果你做类似的事情

export PS1="foo > "
bash --norc
Run Code Online (Sandbox Code Playgroud)

新的 shell 会得到您刚刚设置的提示。

更新:正如伊恩·凯林 (Ian Kelling) 所指出的,下面的变量设置在.bashrc源自.bashrc. 更一般地,每当 shell 获取脚本(使用source scriptname命令)时,脚本中设置的变量在 shell 的生命周期内都会持续存在。


小智 11

两者似乎都可以正常工作,但使用 export 将确保该变量可用于子外壳程序和其他程序。要测试这一点,试试这个。

将这两行添加到您的 .bashrc 文件中

TESTVAR="no export"
export MYTESTVAR="with export"
Run Code Online (Sandbox Code Playgroud)

然后打开一个新的shell。

运行echo $TESTVARecho $MYTESTVAR会显示每个变量的内容。现在在同一个 shell 中从 .bashrc 文件中删除这两行并运行bash以启动子 shell。

运行echo $TESTVAR将有一个空输出,但运行echo $MYTESTVAR将显示“with export”