export
爲shell變量或函數設置導出屬性。
概要
1export [-fn] [name[=word]]...
2export -p
主要用途
- 定義一到多個變量並設置導出屬性。
- 修改一到多個變量的值並設置導出屬性。
- 刪除一到多個變量的導出屬性。
- 顯示全部擁有導出屬性的變量。
- 爲一到多個已定義函數新增導出屬性。
- 刪除一到多個函數的導出屬性。
- 顯示全部擁有導出屬性的函數。
選項
1-f:指向函數。
2-n:刪除變量的導出屬性。
3-p:顯示全部擁有導出屬性的變量。
4-pf:顯示全部擁有導出屬性的函數。
5-nf:刪除函數的導出屬性。
6--:在它之後的選項無效。
參數
name(可選):變量名或已定義函數名。
value(可選):變量的值。
返回值
export返回true除非你提供了非法選項或非法名稱。
例子
1# 顯示全部擁有導出屬性的變量。
2# export -p
3# export
4# 顯示全部擁有導出屬性的函數。
5# export -pf
1# 首先刪除要演示的變量名
2#unset a b
3# 定義變量的同時增加導出屬性
4export a b=3
5# 當然也可以先定義後增加導出屬性
6b=3
7export b
8
9# 修改擁有導出屬性的變量的值
10export a=5 b=7
11# 當然也可以直接賦值修改
12a=5;b=7
13
14# 刪除變量的導出屬性
15export -n a b
1# 首先刪除要演示的函數名
2unset func_1 func_2
3# 創建函數
4function func_1(){ echo '123'; }
5function func_2(){ echo '890'; }
6
7# 爲已定義函數增加導出屬性
8export -f func_1 func_2
9
10# 刪除函數的導出屬性
11export -fn a b
1# 添加環境變量(JAVA)到`~/.bashrc`
2PATH=/usr/local/jdk1.7.0/bin:$PATH
3# 添加當前位置到動態庫環境變量
4export LD_LIBRARY_PATH=$(pwd):${LD_LIBRARY_PATH}
錯誤用法
- 對未定義的函數添加導出屬性。
- 對沒有導出屬性的函數/變量執行刪除導出屬性操作。
- 在
--
後使用選項。
Q&A
Q:對變量或函數設置導出屬性有什麼用?
A:它們會成爲環境變量,可以在腳本中訪問它們,尤其是腳本中調用的子進程需要時。( 參考鏈接4 )
Q:如果我編寫的腳本修改了已有的環境變量的值,那麼執行它會在當前終端生效嗎?會影響之前以及之後打開的終端嗎?
A:只有通過source
方式調用的腳本會生效,您可以查看source
命令獲得更多信息;其他方式只是在子shell中執行。
之前的不會影響,之後的除非是修改了~/.bashrc
這種啓動終端時加載的腳本。( 參考鏈接1 )
Q:我腳本文件中調用~/.bashrc
中定義的函數和變量。爲什麼在新打開的終端中通過 sh
方式調用該腳本或直接運行
這個當前用戶有執行權限的腳本卻不能使用這些函數和變量?
A:請在~/.bashrc
文件中增加export它們的語句。另請參閱 知識點 段落。
Q:數組和關聯數組也可以設置導出屬性嗎?
A:是可以的(如果你的bash支持它們),不過有些問題( 參考鏈接2 )。
Q:爲什麼我在查看變量或函數導出屬性的時候顯示的開頭是declare
?
A:因爲declare
也能夠設置變量或函數的導出屬性,詳見declare
命令。
注意
- 該命令是bash內建命令,相關的幫助信息請查看
help
命令。
知識點
在info bash
或 bash在線文檔 的
3.7.3
節提到了shell執行環境,其中涉及變量和函數的內容如下
- shell parameters that are set by variable assignment or with set or inherited from the shell’s parent in the environment
- shell functions defined during execution or inherited from the shell’s parent in the environment
那麼第一句話中的參數又和變量有什麼關係呢?在3.4
節第一段中提到:
A variable is a parameter denoted by a name.
變量是有名字的參數。
那麼子shell確實繼承了父shell中帶有導出屬性的變量或函數。
可參考鏈接: 執行腳本方式的區別
參考鏈接
擴展閱讀
一般來說,配置交叉編譯工具鏈的時候需要指定編譯工具的路徑,此時就需要設置環境變量。查看已經存在的環境變量:
1[root@localhost ~]# export
2declare -x G_BROKEN_FILENAMES="1"
3declare -x HISTSIZE="1000"
4declare -x HOME="/root"
5declare -x hostname="localhost"
6declare -x INPUTRC="/etc/inputrc"
7declare -x LANG="zh_CN.UTF-8"
8declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
9declare -x logname="root"
10declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
11declare -x mail="/var/spool/mail/root"
12declare -x OLDPWD
13declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
14declare -x pwd="/root"
15declare -x SHELL="/bin/bash"
16declare -x SHLVL="1"
17declare -x SSH_CLIENT="192.168.2.111 2705 22"
18declare -x SSH_CONNECTION="192.168.2.111 2705 192.168.2.2 22"
19declare -x SSH_TTY="/dev/pts/0"
20declare -x TERM="linux"
21declare -x USER="root"
來源:https://github.com/jaywcjlove/linux-command
最後修改於: Wednesday, January 31, 2024
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。