梳理一下环境变量的知识。
什么是环境变量
可以拆开来解释,环境变量=环境+变量。变量我们都知道,var a = "hello"
,那么a就是一个变量,它的值是hello
。重点是环境如何理解?
环境,可以简单理解为进程。环境变量,就是每一个进程,都有一堆与之相关的变量,称之为环境变量。
举个周所周知的例子,PATH变量。很多软件下载下来,还需要配一个PATH变量,将可执行程序的路径添加到PATH变量中,这样在shell
中才能运行对应的可执行程序。这里的PATH
就是shell
进程的一个环境变量,shell
会根据PATH中所指定的路径,去找可执行程序。
类似的还有:HTTP_PROXY
,shell
会根据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配置的原因。
下篇
下篇将梳理一下环境变量的知识:
- 初始环境变量从何而来
- 如何读取任意进程的环境变量
- 如何在代码中修改环境变量