概述

Linux shell中每个变量均有自己的生命周期,一般变量的生命周期为当前shell,通过export命令可以拓展变量的生命周期为当前shell和其子shell,而环境变量一般都需要修改其生命周期。

但是,我们知道在linux中,我们可以通过setexportenv多个命令实现变量声明周期的改变,他们之间会存在一定的差别。

区别

  • 一般变量:生命周期仅存在当前shell。
  • export变量:生命周期拓展为当前shell和子shell。
  • env变量:不改变当前shell中的环境变量,但是对指定的命令设置新变量。

其中,一般变量和export变量比较好理解,env变量似乎比较难懂。看下面一个专业解释:

  1. The command env gets executed as a new process
  2. env modifies the environment, and
  3. calls the command that was provided as an argument. The env process is replaced by the command process.

翻译成人话(中文)就是,export是bash的一个内置(built-in)命令,但是env不是,env是一个程序,(1)其每次执行都会创建一个新的进程;(2)env修改新创建进程的(环境)变量;(3)调用env后面(作为env参数)的命令,该命令直接挤占之前env创建的进程。因此,env不改变shell的(环境)变量,但是会修改命令的(环境)变量。