随记:Linux变量
转自http://zzkai.blog.sohu.com/199683549.html1. 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环境相反。
页:
[1]