配置过环境变量的童鞋肯定都过类似经历,尤其在Linux 和Mac中,配置完环境变量后,新配置的环境变量需要
source
以后才会起作用;过程中会用到export这个关键字,export
到底什么意思,有什么作用?
一
系统启动的时候会默认加载一组shell变量。如果后续新增的变量(比如JAVA_HOME),就必须在引入进来,export
就是起到引入的作用。
export
完成后,还需要source
加载进来才能生效。
为什么有的时候每次打开一个shell窗口就要source
一次?
这个就跟export
引入变量的作用域有关系。
二
首先看下 Linux中环境变量的启动过程
如下图:
在shell中执行程序,shell会提供一组环境变量。当打开一个shell命令窗口的时候,就代表一个shell环境加载完成。
export
用来设置或显示环境变量;export
可新增、修改或删除环境变量;export
的作用范围仅限于此次建立的连接登录操作;
export语法:
export [-fnp] [变量名称key] = [变量值value]
#参数说明
-f:代表[变量名称]中为函数名称
-n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中
-p:列出所有的shell赋予程序的环境变量
三
shell中变量环境分三种:内部变量、环境变量、用户变量
- 内部变量:系统提供,不用定义,不可修改;
- 环境变量:系统提供,不用定义,可以修改,利用export将用户变量转为环境变量;
- 用户变量:用户定义,可以修改;
内部变量值是不可修改的,如下:
表示方法 描述
$n $1 表示第一个参数,$2 表示第二个参数 ...
$# 命令行参数的个数
$0 当前程序的名称
$? 前一个命令或函数的返回码
$* 以"参数1 参数2 ... " 形式保存所有参数
$@ 以"参数1" "参数2" ... 形式保存所有参数
$$ 本程序的(进程ID号)PID
如何使常用的环境变量只配置一次就可以呢?
通过上图环境变量启动过程,可将变量在当前用户或所有用户的配置中进行修改即可。
四
除了export
可以显示环境变量外,set
和env
也可以显示环境变量。
set
显示当前shell的变量,包括当前用户的变量env
显示当前用户的变量export
显示当前到处成用户变量的shell变量
参考链接:
Linux Export命令
shell与export命令
linux set,env和export
linux中env,export, set的区别
始发于2019.07.02