概念
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'
设置环境变量
-
创建
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:/#
-
将
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:/#
删除变量或函数的导出属性
-
删除变量的导出属性
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:/#
-
删除函数的导出属性
同删除变量的导出属性一样,如下示例
定义
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