吴化吉的博客

专注Web开发

发布时间:2018-11-08

环境变量(一):基本概念 和 shell 操作

梳理一下环境变量的知识。

什么是环境变量

可以拆开来解释,环境变量=环境+变量。变量我们都知道,var a = "hello",那么a就是一个变量,它的值是hello。重点是环境如何理解?

环境,可以简单理解为进程。环境变量,就是每一个进程,都有一堆与之相关的变量,称之为环境变量。

举个周所周知的例子,PATH变量。很多软件下载下来,还需要配一个PATH变量,将可执行程序的路径添加到PATH变量中,这样在shell中才能运行对应的可执行程序。这里的PATH就是shell进程的一个环境变量,shell会根据PATH中所指定的路径,去找可执行程序。

类似的还有:HTTP_PROXYshell会根据HTTP_PROXY的值设置http代理。

在shell中对环境变量增删改查:

从前面的描述,我们知道了进程相关的一组变量,进程可以随意利用这些值来控制行为。接下来重点说一下如何在shell中对环境变量进行增删改查。后面一篇会讲如何在程序中对环境变量进行增删改查。

查看:

  • 查看单个环境变量:echo $变量;如:echo $PATH,即可查看变量值
echo $PATH
// /home/wuhuaji/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
  • 查看当前shell进程所有环境变量:env或者printenv命令
env
//LANG=en_US.UTF-8
//LC_CTYPE=zh_CN.UTF-8
//USER=wuhuaji
//LOGNAME=wuhuaji
//HOME=/home/wuhuaji
//还有很多……

删除:unset

使用unset命令即可删除单个环境变量。

➜  ~ export HELLO=WORLD
➜  ~ echo $HELLO
WORLD
➜  ~ unset HELLO
➜  ~ echo $HELLO
// 空
➜  ~

新增和修改: export

export命令的作用是将新增一个环境变量。当然也可以将变量覆盖为一个新值,还可以在原值的基础上追加值。 举例:

//新增一个变量
export HELLO=WORLD
echo $HELLO
// WORLD

//将变量修改为一个新值
export HELLO=hello
echo $HELLO
// hello

//追加值:
export PATH=$HOME/bin:$PATH

export 持久化:

我们已经知道了export能向shell进程中新增或修改环境变量,但是这里应该注意到:是向进程新增或修改,什么意思?就是指针对当前进程,如果你退出了当前shell下次再登录,之前设置的变量就不复存在了。

那怎么办呢,一个办法就是将 export 指令写入到shell配置文件中,.bashrc/.zshrc/...,取决于你用的什么shell。shell在启动时,会读取配置文件,这样就能确保想要配置的环境变量在每个shell进程中生效了。

这些是为什么很多人将export PATH=$HOME/bin:$PATH这样的PATH变量追加语句写入到shell配置的原因。

下篇

下篇将梳理一下环境变量的知识:

  • 初始环境变量从何而来
  • 如何读取任意进程的环境变量
  • 如何在代码中修改环境变量