Linux export、set、env和source作用详解

配置过环境变量的童鞋肯定都过类似经历,尤其在Linux 和Mac中,配置完环境变量后,新配置的环境变量需要source以后才会起作用;过程中会用到export这个关键字,export到底什么意思,有什么作用?


系统启动的时候会默认加载一组shell变量。如果后续新增的变量(比如JAVA_HOME),就必须在引入进来,export就是起到引入的作用。
export完成后,还需要source加载进来才能生效。

为什么有的时候每次打开一个shell窗口就要source一次?
这个就跟export引入变量的作用域有关系。


首先看下 Linux中环境变量的启动过程
如下图:
Linux export、set、env和source作用详解_第1张图片

在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

如何使常用的环境变量只配置一次就可以呢?
通过上图环境变量启动过程,可将变量在当前用户或所有用户的配置中进行修改即可。
Linux export、set、env和source作用详解_第2张图片


除了export可以显示环境变量外,setenv也可以显示环境变量。

  • set 显示当前shell的变量,包括当前用户的变量
  • env 显示当前用户的变量
  • export 显示当前到处成用户变量的shell变量

参考链接:
Linux Export命令
shell与export命令
linux set,env和export
linux中env,export, set的区别

始发于2019.07.02

你可能感兴趣的:(Linux,Shell,测试,Mac环境,Linux,shell,export,source)