随记:Linux变量

转自http://zzkai.blog.sohu.com/199683549.html

1. Linux变量分为本地shell变量和环境变量,export是将本地shell变量导出为当前用户的环境变量

例如:

$ var1=aaa

$ echo $var1

aaa

$ set |grep 'var1'

var1=aaa               #此时本地shell变量中已有var1

$ env |grep 'var1'

                      # 此时当前用户的环境变量中没有var1

$ export var1

$ env |grep 'var1'

var1=aaa              # 通过export导出,用户环境变量也有var1了

$ unset var1          # 取消var1变量,unset对用户变量和shell变量都生效

$ set |grep 'var1'

$ env |grep 'var1'

$ var1=b

$ echo $var1

b

$ set |grep 'var1'

var1=b

$ env |grep 'var1'

$ bash           #开启当前shell的一个子shell

$ echo $var1

  #子shell并没有继承父shell的shell变量

$ exit

$ export var1

$ bash;echo $var1

$ b              #通过父shell的导出操作,其shell变量变成当前用户的变量,因此子shell也将会有用户变量

$ readonly var1  # readonly 将var1变量设置为只读

$ unset var1    # 因为设置了只读属性,无法取消

bash: unset: var1: cannot unset: readonly variable

#######################################################

最根本有效的方式是改变配置文件

用户登陆时会依次读取以下文件,某个不存在则会略过

/etc/profile   ~/.bash_profile ~/.bash_login  ~/.profile ~/.bashrc /etc/bashrc

启动一个新shell时会读取 ~/.bashrc    /etc/bashrc

#######################################################

关于source (.)和export

1、执行脚本是在一个子shell环境运行的,脚本执行完后该子shell自动退出。

2、执行脚本中的系统环境变量(用export定义的变量)才会被复制到子shell中。

3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。

4、不用export定义的变量只对该shell有效,对子shell也是无效的 直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。source可以让脚本影响它们的父shell环境,这和export去影响子shell环境相反。


你可能感兴趣的:(linux,Export,target,blank)