Linux中的全局环境变量和局部环境变量
- 一、全局环境变量
- 二、局部环境变量
- 三、 设置全局环境变量
bash shell用一个叫作环境变量 (environment variable)的特性来存储有关shell会话和工作环境的信息(这也是它们被称作环境变量的原 因)。这项特性允许你在内存中存储数据,以便程序或shell中运行的 脚本能够轻松访问到它们。这也是存储持久数据的一种简便方法。
在bash shell中,环境变量分为两类 :
- 全局变量
- 全局环境变量对于shell会话和所有生成的子shell都是可见的
- 局部变量
- 局部变量只对创建它们的shell可见。
一、全局环境变量
1、 通过 env 这个命令可以查看系统的所有全局变量 。系统默认的全局变量名,基本都是大写的。 如果是自己创建的局部变量或是shell脚本,最好就值使用小写字母。
2、我们也可以通过echo $SHELL
或者printenv SHELL
这样的方式,来查看单个变量的值 。(SHELL是我们想知知道的变量的名字)
二、局部环境变量
1、局部环境变量只能在定义它们的进程中可见
可以通过echo $变量名
这种格式来打印出局部变量名。 或者set | grep 变量名
这种方式 ,值得注意的是env 和 printenv 这种方式只打印全局变量。
2、设置局部环境变量
在shell 进程里设置环境变量的操作和給变量赋值类似,使用 一个等号就可以 my_var= hello_world
,比较特别的是变量名、等号和值之间不能有空格。否则bash shell就会把值变量的值my_var当成一个单独的命令
3、 局部环境变量的使用范围
- 设置了局部环境变量后,就能在shell进程的任何地方使用它了。但是,如果这个shell生成了另外一个子shell,它在子shell中就不可用。然后当你退出子shell并回到原来的shell时,这个局部环境变量依然可用
-
同理,如果在子进程中设置了一个局部环境变量,那么一旦你退出了子进程,那个局部环境变量就不可用
-
如果我们想在父shell 进程中的环境变量,可以被 子shell进程调用,那么就要把这个环境变量设置成全局环境变量
三、 设置全局环境变量
1、设置全局环境变量,是通过export 命令 来设置的,比如:
export my_var="I am Global now"
或者分两步
my_var="I am Global now"
export my_var
2、 设置完成后,我们在子进程中也可以使用这个全局环境变量了。
但是有注意的点是 ,如果我们在父进程里设置全局变量,子进程可以使用,但是子进程设置的全局变量,父进程是没办法调用的。全局环境变量也只能是从父到子传这种场景如下:
3、当父shell定义一个全局环境变量,在子shell中,这个全局环境变量被重新定义了一次,退出子shell, 这个全局环境变量还是之前的值。
4、 删除环境变量
删除环境变量我们使用unset + 变量名 .我们在读取变量的时候要加上$这个提取符号。
总结:
- 1、环境变量的设置有两种,一种就是普通的給变量赋值是我们说的局部变量赋值,另一种是全局环境变量赋值。
- 2、 无论哪种,子进程的值,父进程是无法读取到的,同样也无法改变。
- 3、子进程和父进程里非全局环境变量,都是相互独立的(进程之间资源不共享)。
- 4、 子进程如果想要读取到父进程的值,需要设置成全局环境变量。
- 5、子进程中可以对全局环境变量重新定义,改变,删除,但是影响不到父进程里的全局环境变量。