Linux 三种设置环境变量的方法

一、命令前置的临时环境变量

网上一搜一大把都是说 export 命令与 .bash_profile 文件的,却鲜有人提及可以在命令行语句前设置临时环境变量,并且该变量只对当前语句有效

# usage: var=value [var2=value2 ...] script
var=value sh -c 'echo $var'                    # 打印 value

echo $var                                      # 打印 空行,因为上面的临时环境变量已经失效

var1=value1 var2=foo sh -c 'echo $var2'        # 打印 foo

ps:var=value echo $var 这句是无法打印出临时环境变量 var 的,我也搞不清为什么(参考),所以只能改用 sh -c 'echo $var' 来包装一下。

哦,我有点想通了,感觉应该是这样解释的:var=value script 这种用法,是针对后面 script 语句启动的进程,给这个新的进程设置环境变量。而 echo 是 shell 的内建命令(Builtin Command),它并不会另外启动一个进程,只会读取当前 shell 会话的环境变量。

如何验证 echo 是内建命令呢?可以通过同是内建命令的 type 指令来检查。

我一开始还用 which echo 来检查,然后却发现有的系统会输出 builtin,有的会输出 /bin/echo。原因是对于不同的系统,或者说不同 shell,which 命令本身可能是内建命令,也有可能是外部程序。如果作为外部程序,是无法识别内建命令的 echo 的。

二、当前会话内有效的环境变量

使用 export 命令,可以为当前的 shell 会话设置环境变量,并且只在当前会话内有效

export var=foo          # 添加环境变量
export test=123
echo $var               # 打印 foo

unset var               # 删除环境变量
echo $var               # 打印 空行

echo $test              # 打印 123

如果另外打开一个 shell 窗口,echo 这两个新增的环境变量,都是不存在的。

三、持久存储的环境变量

就是修改 /etc/profile, ~/.bash_profile 等等这些文件,具体网上找吧。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top