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

注意

  1. 該命令是bash內建命令,相關的幫助信息請查看help命令。

知識點

info bashbash在線文檔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. 關於bashrc profile文件的討論
  2. 關於export數組的討論
  3. export -pf用法
  4. 環境變量和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

相關文章:

翻譯: