shirobert 发表于 2018-5-25 09:23:54

随记: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环境相反。
  
页: [1]
查看完整版本: 随记:Linux变量