• Linux export 命令


    概念

    export 命令用于设置或显示环境变量,将 shell 变量输出为环境变量,或者将 shell 函数输出为环境变量。

    一个 shell 变量创建时,它不会自动地为在它之后创建的 shell 进程所知。而命令 export 可以向后面的 shell 传递变量的值,即创建环境变量。

    语法

    export [-fnp][变量名称]=[变量设置值]
    

    参数

    • -f :代表[变量名称]中为函数名称
    • -n:删除变量的导出属性,即删除环境变量
    • -p:列出所有的shell赋予程序的环境变量

    使用示例

    列出当前所有的环境变量

    root@OpenWrt:/# export -p
    export HOME='/root'
    export LOGNAME='root'
    export OLDPWD='/root'
    export PATH='/usr/sbin:/usr/bin:/sbin:/bin'
    export PS1='\u@\h:\w\$ '
    export PWD='/'
    export SHELL='/bin/ash'
    export SHLVL='1'
    export TERM='linux'
    export USER='root'
    

    设置环境变量

    1. 创建 shell 变量 SHELLVAR

      root@OpenWrt:/# SHELLVAR=helloworld
      root@OpenWrt:/# 
      root@OpenWrt:/# echo $SHELLVAR              #打印变量SHELLVAR
      helloworld
      root@OpenWrt:/# export -p                   #查看当前Shell环境变量
      export HOME='/root'
      export LOGNAME='root'
      export OLDPWD='/root'
      export PATH='/usr/sbin:/usr/bin:/sbin:/bin'
      export PS1='\u@\h:\w\$ '
      export PWD='/'
      export SHELL='/bin/ash'
      export SHLVL='1'
      export TERM='linux'
      export USER='root'
      

      编写 test.sh shell 脚本,在脚本中打印 SHELLVAR 的值

      #!/bin/sh
      echo "Print SHELLVAR=$SHELLVAR"
      

      执行 test.sh 脚本,SHELLVAR 没有值,子 shell 无法访问该变量

      root@OpenWrt:/# ./test.sh                     #执行脚本是子进程(shell)在执行
      Print SHELLVAR=
      root@OpenWrt:/# 
      
    2. shell 变量输出为环境变量

      root@OpenWrt:/# export SHELLVAR
      root@OpenWrt:/# export -p
      export HOME='/root'
      export LOGNAME='root'
      export OLDPWD='/root'
      export PATH='/usr/sbin:/usr/bin:/sbin:/bin'
      export PS1='\u@\h:\w\$ '
      export PWD='/'
      export SHELL='/bin/ash'
      export SHELLVAR='helloworld'                   #shell 变量 SHELLVAR 已经导出为环境变量了
      export SHLVL='1'
      export TERM='linux'
      export USER='root'
      root@OpenWrt:/#
      

      注:既可以使用 export 把已有的shell变量导出为环境变量,也可以直接使用 export 创建环境变量

      执行 test.sh 脚本,此时子 shell 可以访问该变量的值

      root@OpenWrt:/# ./test.sh                     #执行脚本是子进程(shell)在执行
      Print SHELLVAR=helloworld                     #可以正常打印出SHELLVAR的值
      root@OpenWrt:/# 
      

    删除变量或函数的导出属性

    1. 删除变量的导出属性

      export -n [变量名]
      

      删除环境变量 SHELLVAR 后,使用 export -p 无法查看到删除的变量

      root@OpenWrt:/# export -n SHELLVAR
      root@OpenWrt:/# export -p
      export HOME='/root'
      export LOGNAME='root'
      export OLDPWD='/root'
      export PATH='/usr/sbin:/usr/bin:/sbin:/bin'
      export PS1='\u@\h:\w\$ '
      export PWD='/'
      export SHELL='/bin/ash'
      export SHLVL='1'
      export TERM='linux'
      export USER='root'
      

      再次执行 shell 脚本

      root@OpenWrt:/# ./test.sh                     #再次执行脚本,SHELLVAR环境变量被删除,子进程无法使用它
      Print SHELLVAR=
      root@OpenWrt:/# 
      
    2. 删除函数的导出属性

      同删除变量的导出属性一样,如下示例

      定义 shell 函数

      $ function shell_func_test(){ echo "Just for a test!"; }
      

      编写 test.sh shell 脚本

      #!/bin/bash
      echo "Exec shell func:"
      shell_func_test        #执行shell函数
      

      执行 shell 函数,子 shell 中无法访问该函数

      $ ./test.sh            #执行脚本是子进程(shell)在执行
      Exec shell func:
      ./test.sh: line 3: shell_func_test: command not found
      

      给函数添加导出属性(添加到环境变量)

      $ export -f shell_func_test
      $ export -pf 
      shell_func_test () 
      { 
          echo "Just for a test!"
      }
      declare -fx shell_func_test
      

      给函数添加导出属性后执行成功

      $ ./test.sh                       
      Exec shell func:
      Just for a test!
      

      移除函数导出属性后执行失败

      $ export -nf shell_func_test
      $ export -pf                 
      $ ./test.sh                 
      Exec shell func:
      ./test.sh: line 3: shell_func_test: command not found
      

    【参考】


    Linux之export命令

    Linux export 命令

  • 相关阅读:
    思维发散的双刃剑
    一个请求过来都经过了什么?(Thrift版)
    业务开发转基础开发,这三种「高可用」架构你会么?
    程序常用的设计技巧
    美团分布式服务通信框架及服务治理系统OCTO
    《程序员修炼之道》解读
    面试官说:你真的不是不优秀只是不合适
    架构视角-文件的通用存储原理
    那些影响深远的弯路
    iOS sqlite ORM框架-LKDBHelper
  • 原文地址:https://www.cnblogs.com/shelmean/p/16152480.html
Copyright © 2020-2023  润新知