定义:在内存中存储有关shell会话和工作环境的信息,以便程序或shell中运行的脚本能够轻松访问到它们。
全局环境变量对于shell会话和所有生成的子shell都是可见的;局部变量则只对创建它们的shell可见。
env
或printenv
命令.set
命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量。my_variable=Hello my_variable="Hello World" echo $my_variable
⚠️注意:
创建方法:先创建一个局部环境变量,然后再把它导出到全局环境中。【子shellexport导出的变量,父shell接收不到】
⚠️注意:
使用unset命令完成这个操作。【在unset命令中引用环境变量时,记住不要使用$。】
⚠️注意:
如果要用到变量,使用$
;如果要操作变量,不使用$
。这条规则的一个例外就是使用printenv显示某个变量的值。
PATH环境变量定义了用于进行命令和程序查找的目录。
临时添加PATH环境变量:
PATH=$PATH:/home/christine/Scripts
对PATH变量的修改只能持续到退出或重启系统.
linux启动shell时,会从启动文件或环境文件中读取环境变量。
/etc/profile
文件是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。剩余的四个文件【它们是隐藏文件】,提供一个用户专属的启动文件来定义该用户所用到的环境变量,大多数Linux发行版只用这四个启动文件中的一到两个。shell会按照按照下列顺序,运行第一个被找到的文件,余下的则被忽略【$HOME表示的是某个用户的主目录。它和波浪号(~)的作用一样。】:
$HOME/.bash_profile $HOME/.bash_login $HOME/.profile
这个列表中并没有$HOME/.bashrc
文件。这是因为该文件通常通过其他文件运行的。
Ubuntu发行版中环境变量包含在/etc/bash.bashrc
的文件,但是,在的CentOS发行版的/etc/profile文件中,并没有出现这个文件。
注意⚠️:
概念:bash shell不是登录系统时启动的(比如是在命令行提示符下敲入bash时启动),那么你启动的shell叫作交互式shell。
如果bash是作为交互式shell启动的,它就不会访问/etc/profile文件,只会检查用户HOME目录中的.bashrc
文件。
.bashrc文件有两个作用:
概念:系统执行shell脚本时用的就是这种shell。不同的地方在于它没有命令行提示符。
bash shell提供了BASH_ENV环境变量
,当shell启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。如果有指定的文件,shell会执行该文件里的命令,这通常包括shell脚本变量设置。
如果BASH_ENV变量没有设置,由于有些shell脚本是通过启动一个子shell来执行的,子shell可以继承父shell导出过的变量。如果父shell是登录shell,在/etc/profile、/etc/profile.d/*.sh和$HOME/.bashrc
文件中设置并导出了变量,用于执行脚本的子shell就能够继承这些变量。
对于那些不启动子shell的脚本,变量已经存在于当前shell中了,所以就算没有设置BASH_ENV,也可以使用当前shell的局部变量和全局变量。
注意⚠️:如果父shell设置但并未导出的变量都是局部变量,子shell无法继承局部变量。
全局环境变量来说(Linux系统中所有用户都需要使用的变量),可能更倾向于将新的或修改过的变量设置放在/etc/profile文件中,但是如果你升级了所用的发行版,这个文件也会跟着更新,那你所有定制过的变量设置可就都没有了。
最好是在/etc/profile.d
目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变量设置放在这个文件中。
在大多数发行版中,存储个人用户永久性bash shell变量的地方是$HOME/.bashrc
文件,适用于所有类型的shell进程。但如果设置了BASH_ENV变量
,那么记住,除非它指向的是$HOME/.bashrc
,否则你应该将非交互式shell的用户变量放在别的地方。
要引用一个单独的数组元素,就要使用方括号+数值索引值【环境变量数组的索引值都是从零开始】.要显示整个数组变量,可用星号作为通配符放在索引值的位置。
$ mytest=(one two three four five) $ echo $mytest one $ echo ${mytest[2]} three
数组变量的可移植性并不好,如果需要在不同的shell环境下从事大量的脚本编写工作,这会带来很多不便。