本文共 1584 字,大约阅读时间需要 5 分钟。
环境变量的本质就是变量,它的服务对象是shell程序,它分为局部环境变量和全局环境变量,分别有不同的作用域和自然生命周期
不同的情况下,会产生不同的shell。既然环境变量是服务于shell程序的,那么就来分析一下不同角色的shell
使用export导出的环境变量,就是全局环境变量
登录系统后,首个执行的应用程序bash(登录shell)所创建的一堆全局环境变量,它们称为始祖环境变量。这一堆环境变量的生命周期是永久的
启动shell会执行/etc/profile
,导出一些通用全局环境变量,export PATH USER LOGNAME MAIL HOSTNAME
等,所有用户的shell进程都可以访问到这些变量,我们可以在里面添加系统级别的环境变量。然后再依次执行~/.bash_profile、~/.bash_login、~/.profile或者~./bashrc,或者/etc/bashrc
,来初始化一些用户特有的环境变量,需要注意的是后面几个文件不一定都存在
在/etc/profile
最后加上export PATH="/xxxx/xxx$PATH"
export AAA="123"
,那么今后在该控制台中,直接或间接执行的shell,都将继承该控制台(交互式shell)留下来的全局环境变量,包括加入的VAR="123"
a.sh
、b.sh
,a.sh
中执行了b.sh
,b.sh
中执行了export BBB="123"
。现在执行a.sh
,则b.sh
是其子shell,所以 BBB
这个环境变量对a.sh
起不了作用。再一次印证了全局环境变量只能由创建者shell传给子孙shell不使用export导出的环境变量,就是局部环境变量。它通常作为某个脚本(非交互式shell)自己的私有变量
test=123 #局部环境变量一般用小写export TEST=123 #全局环境变量一般用大写export MYNAME='XIAO BA WU' #变量值有空格,要用单引号围起来export test #也可以这样把前面的局部变量导出到全局
printenv #查看所有环境变量echo $HOME #查看指定环境变量
unset MYNAME
转载地址:http://mpvin.baihongyu.com/