红联Linux门户
Linux帮助

Linux中将局部变量转换成环境变量

发布时间:2017-05-30 15:18:38来源:今日头条作者:Linux系统学习
当用户创建一个变量之后,这个变量只能在该用户目前工作的Shell环境中使用,一旦离开了当前的shell环境,该变量就失效了。只有环境变量才能不仅在当前的shell环境中生效,而且还可以在它的所有子shell中生效。如果想在当前的shell和它的每一个子shell中使用自定义的变量,就必须将这个自定义的变量转换成环境变量,语法如下:
 
export 变量名
你可以把当前工作的shell看成一个主程序,将它的子shell看成这个主程序的一些子程序。而环境变量就相当于全局变量,因此环境变量可以在主程序和它的所有子程序中使用。
Linux中将局部变量转换成环境变量
下面通过首先定义局部变量,之后再将其环境变量的例子来进一步解释将局部变量升级为环境变量的具体操作。下面还是使用DOG1_COLOR和DOG2_COLOR这两个自定义的变量,首先应该使用以set开始的组合命令来查看要创建的变量是否存在:
goddog@promote:~$ set | grep DOG
确认不存在后,创建这一变量,并将它的值设定为black:
goddog@promote:~$ DOG1_COLOR=black
使用以set开头的组合命令查看变量DOG1_COLOR和它的值:
goddog@promote:~$ set | grep DOG
DOG1_COLOR=black
这里最好不要直接使用set测试,因为这样会显示太多毫不相关的变量。
确认DOG1_COLOR已经存在后,使用su命令切换到其他用户,我这里就切换到firefox,使用以set开始的组合命令来查看变量DOG1_COLOR和它的值:
goddog@promote:~$ su firefox
firefox@promote:/home/goddog$ set | grep DOG
系统执行完以上命令没有任何显示结果出现,这表明在firefox用户的环境中根本没有DOG1_COLOR这个变量,也就是firefox这个用户无法使用goddog用户的变量DOG1_COLOR。这也就证明了局部变量只在当前的shell中有效。这里由于是在goddog用户中使用su命令切换到firefox用户,所以goddog用户使用的shell称为主(parent)shell,而firefox用户使用的shell称为子(child)shell。
 
Linux中将局部变量转换成环境变量举例
使用export命令将自定义变量 DOG1_COLOR 升级为环境变量:
goddog@promote:~$ export DOG1_COLOR
使用env开始的组合命令来查看DOG1_COLOR是否已经升级为环境变量:
goddog@promote:~$ env | grep DOG
DOG1_COLOR=black
切换到firefox用户,使用以set开始的组合命令和以env开始的组合命令来查看变量DOG1_COLOR是否存在:
goddog@promote:~$ su firefox
firefox@promote:/home/goddog$ set | grep DOG
DOG1_COLOR=black
firefox@promote:/home/goddog$ env | grep DOG
DOG1_COLOR=black
Linux中将局部变量转换成环境变量
其实,可以在定义变量的同时就将这个变量升级为环境变量,如下例:使用export命令定义一个名为DOG2_COLOR的变量,并将它升级为一个环境变量:
goddog@promote:~$ export DOG2_COLOR=grey
当一个变量不再需要时,可以使用unset取消这个变量:
firefox@promote:/home/goddog$ unset DOG2_COLOR
如果在子shell中,unset命令则只能取消当前shell中的变量,其他shell中的变量不受影响。如果是在主shell中,unset命令不但取消当前shell中的这个变量,而且它的所有子shell也不能再访问这个变量了。
需要注意的是:所有的子shell与所有的shell(用户)并不是一个概念。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/31170.html