每一个shell有本身特有的变量(set)显示的变量,这个和用户变量是不一样的,当前用户变量和你用什么shell无关,无论你用什么shell都在,好比HOME,SHELL等这些变量,但shell本身的变量不一样shell是不一样的,好比BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,由于一个shell本身的变量能够经过export “导出”变成一个用户变量linux
[root@linux ~]# aaa=bbbshell
[root@linux ~]# echo $aaa
bbbbash
[root@linux ~]# set|grep aaa
aaa=bbbspa
[root@linux ~]# env|grep aaa操作系统
[root@linux ~]# export aaa对象
[root@linux ~]# env|grep aaa
aaa=bbb继承
扩展资料二:set、env、export——Linux中的环境变量命令进程
Linux是一个多用户的操做系统。每一个用户登陆系统后,都会有一个专用的运行环境。一般每一个用户默认的环境都是相同的,这个默认环境实际上就是一组环境 变量的定义。用户能够对本身的运行环境进行定制,其方法就是修改相应的系统环境变量。ip
什么是环境变量test
环境变量是一个具备 特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。许多用户(特别是那些刚接触Linux的新手)发现这些变量有些怪异或者难以控制。其 实,这是个误会:经过使用环境变量,你能够很容易的修改一个牵涉到一个或多个应用程序的配置信息。
一、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;二、一个shell中的系统环境变量才会被复制到子 shell中(用export定义的变量);三、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失 (并不能返回到父shell中)。三、不用export定义的变量只对该shell有效,对子shell也是无效的。
在shell脚本里面export的环境变量,在set里面居然看不到。为何在shell脚本里面用export设置环境变量以后,当shell执行完了,用set命令看不到呢?可是你若是直接在终端里export 环境变量用set是看到的。
这里要说一下shell的执行方法了,举个例子来说:
一个shell脚本test.sh的内容为:
【 #!/bin/bash
export AA=123】
当咱们执行test.sh的时候,是当前终端所在的shell fork一个子shell而后执行test.sh的,执行完了再返回终端所在的shell。明白这点,就容易理解了,咱们在test.sh设置了AA环境 变量,它只在fork出来的这个子shell中生效,子shell只能继承父shell的环境变量,而不能修改父shell的环境变量,因此test.sh结束后,父进程的环境就覆盖回去。因此在test.sh以后完以后,咱们用set命令是看不了AA这个环境变量的值的。
那有什么办法可让脚本的环境变量在脚本执行以后仍然对当前终端存在呢?用sorcue 或者.(dot) 。明确告诉shell不要fork执行脚本,而是在当前的shell执行,这样环境变量就能够保存下来了。
source命令用法:
source Filename (一般用“.”来代替)
source test.sh 与 .test.sh是等效的。
【补充】
source命令与shell scripts的区别是,source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样若是把设置环境变量(或alias等等)的命令写进 scripts中,就只会影响子shell,没法改变当前的BASH,因此经过文件(命令列)设置环境变量时,要用source 命令。