概念
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