Linux命令 export - 為shell變量或函數(shù)設(shè)置導(dǎo)出屬性

2021-11-09 11:01 更新

export

為shell變量或函數(shù)設(shè)置導(dǎo)出屬性。

概要

export [-fn] [name[=word]]...
export -p

主要用途

  • 定義一到多個變量并設(shè)置導(dǎo)出屬性。
  • 修改一到多個變量的值并設(shè)置導(dǎo)出屬性。
  • 刪除一到多個變量的導(dǎo)出屬性。
  • 顯示全部擁有導(dǎo)出屬性的變量。
  • 為一到多個已定義函數(shù)新增導(dǎo)出屬性。
  • 刪除一到多個函數(shù)的導(dǎo)出屬性。
  • 顯示全部擁有導(dǎo)出屬性的函數(shù)。

選項(xiàng)

-f:指向函數(shù)。
-n:刪除變量的導(dǎo)出屬性。
-p:顯示全部擁有導(dǎo)出屬性的變量。
-pf:顯示全部擁有導(dǎo)出屬性的函數(shù)。
-nf:刪除函數(shù)的導(dǎo)出屬性。
--:在它之后的選項(xiàng)無效。

參數(shù)

name(可選):變量名或已定義函數(shù)名。

value(可選):變量的值。

返回值

export返回true除非你提供了非法選項(xiàng)或非法名稱。

例子

# 顯示全部擁有導(dǎo)出屬性的變量。
# export -p
# export
# 顯示全部擁有導(dǎo)出屬性的函數(shù)。
# export -pf
# 首先刪除要演示的變量名
#unset a b
# 定義變量的同時增加導(dǎo)出屬性
export a b=3
# 當(dāng)然也可以先定義后增加導(dǎo)出屬性
b=3
export b

# 修改擁有導(dǎo)出屬性的變量的值
export a=5 b=7
# 當(dāng)然也可以直接賦值修改
a=5;b=7

# 刪除變量的導(dǎo)出屬性
export -n a b
# 首先刪除要演示的函數(shù)名
unset func_1 func_2
# 創(chuàng)建函數(shù)
function func_1(){ echo '123'; }
function func_2(){ echo '890'; }

# 為已定義函數(shù)增加導(dǎo)出屬性
export -f func_1 func_2

# 刪除函數(shù)的導(dǎo)出屬性
export -fn a b
# 添加環(huán)境變量(JAVA)到`~/.bashrc`
PATH=/usr/local/jdk1.7.0/bin:$PATH
# 添加當(dāng)前位置到動態(tài)庫環(huán)境變量
export LD_LIBRARY_PATH=$(pwd):${LD_LIBRARY_PATH}

錯誤用法

  • 對未定義的函數(shù)添加導(dǎo)出屬性。
  • 對沒有導(dǎo)出屬性的函數(shù)/變量執(zhí)行刪除導(dǎo)出屬性操作。
  • 在 -- 后使用選項(xiàng)。

Q&A

Q:對變量或函數(shù)設(shè)置導(dǎo)出屬性有什么用?

A:它們會成為環(huán)境變量,可以在腳本中訪問它們,尤其是腳本中調(diào)用的子進(jìn)程需要時。( 參考鏈接4 )

Q:如果我編寫的腳本修改了已有的環(huán)境變量的值,那么執(zhí)行它會在當(dāng)前終端生效嗎?會影響之前以及之后打開的終端嗎?

A:只有通過source方式調(diào)用的腳本會生效,您可以查看source命令獲得更多信息;其他方式只是在子shell中執(zhí)行。 之前的不會影響,之后的除非是修改了~/.bashrc這種啟動終端時加載的腳本。( 參考鏈接1 )

Q:我腳本文件中調(diào)用~/.bashrc中定義的函數(shù)和變量。為什么在新打開的終端中通過 sh 方式調(diào)用該腳本或直接運(yùn)行

這個當(dāng)前用戶有執(zhí)行權(quán)限的腳本卻不能使用這些函數(shù)和變量?A:請?jiān)趡/.bashrc文件中增加export它們的語句。另請參閱 知識點(diǎn) 段落。

Q:數(shù)組和關(guān)聯(lián)數(shù)組也可以設(shè)置導(dǎo)出屬性嗎?

A:是可以的(如果你的bash支持它們),不過有些問題( 參考鏈接2 )。

Q:為什么我在查看變量或函數(shù)導(dǎo)出屬性的時候顯示的開頭是declare?

A:因?yàn)閐eclare也能夠設(shè)置變量或函數(shù)的導(dǎo)出屬性,詳見declare命令。

注意

  1. 該命令是bash內(nèi)建命令,相關(guān)的幫助信息請查看help命令。

知識點(diǎn)

在info bash或 bash在線文檔 的 3.7.3節(jié)提到了shell執(zhí)行環(huán)境,其中涉及變量和函數(shù)的內(nèi)容如下

shell parameters that are set by variable assignment or with set or inherited from the shell’s parent in the environmentshell functions defined during execution or inherited from the shell’s parent in the environment

那么第一句話中的參數(shù)又和變量有什么關(guān)系呢?在3.4節(jié)第一段中提到:

A variable is a parameter denoted by a name.

變量是有名字的參數(shù)。

那么子shell確實(shí)繼承了父shell中帶有導(dǎo)出屬性的變量或函數(shù)。

可參考鏈接: 執(zhí)行腳本方式的區(qū)別

參考鏈接

  1. 關(guān)于bashrc profile文件的討論
  2. 關(guān)于export數(shù)組的討論
  3. export -pf用法
  4. 環(huán)境變量和shell變量的區(qū)別

擴(kuò)展閱讀

一般來說,配置交叉編譯工具鏈的時候需要指定編譯工具的路徑,此時就需要設(shè)置環(huán)境變量。查看已經(jīng)存在的環(huán)境變量:

[root@localhost ~]# export
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x hostname="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x logname="root"
declare -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:"
declare -x mail="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x pwd="/root"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="192.168.2.111 2705 22"
declare -x SSH_CONNECTION="192.168.2.111 2705 192.168.2.2 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="linux"
declare -x USER="root"


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號