概念

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 命令

版权声明:本文为Shelmean原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shelmean/p/16152480.html