shell环境变量生命周期控制
概述
Linux shell中每个变量均有自己的生命周期,一般变量的生命周期为当前shell,通过export
命令可以拓展变量的生命周期为当前shell和其子shell,而环境变量一般都需要修改其生命周期。
但是,我们知道在linux中,我们可以通过set
、export
、env
多个命令实现变量声明周期的改变,他们之间会存在一定的差别。
区别
- 一般变量:生命周期仅存在当前shell。
- export变量:生命周期拓展为当前shell和子shell。
- env变量:不改变当前shell中的环境变量,但是对指定的命令设置新变量。
其中,一般变量和export变量比较好理解,env变量似乎比较难懂。看下面一个专业解释:
- The command
env
gets executed as a new processenv
modifies the environment, and- calls the command that was provided as an argument. The
env
process is replaced by thecommand
process.
翻译成人话(中文)就是,export
是bash的一个内置(built-in)命令,但是env
不是,env
是一个程序,(1)其每次执行都会创建一个新的进程;(2)env
修改新创建进程的(环境)变量;(3)调用env
后面(作为env
参数)的命令,该命令直接挤占之前env
创建的进程。因此,env
不改变shell的(环境)变量,但是会修改命令的(环境)变量。