黄色片网站免费观看-黄色片网站观看-黄色片网站大全-黄色片视频网-色偷偷网址-色偷偷网站

export

為shell變量或函數設置導出屬性。

概要

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

主要用途

選項

-f:指向函數。
-n:刪除變量的導出屬性。
-p:顯示全部擁有導出屬性的變量。
-pf:顯示全部擁有導出屬性的函數。
-nf:刪除函數的導出屬性。
--:在它之后的選項無效。

參數

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

value(可選):變量的值。

返回值

export返回true除非你提供了非法選項或非法名稱。

例子

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

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

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

# 為已定義函數增加導出屬性
export -f func_1 func_2

# 刪除函數的導出屬性
export -fn a b
# 添加環境變量(JAVA)到`~/.bashrc`
PATH=/usr/local/jdk1.7.0/bin:$PATH
# 添加當前位置到動態庫環境變量
export 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執行環境,其中涉及變量和函數的內容如下

那么第一句話中的參數又和變量有什么關系呢?在3.4節第一段中提到:

A variable is a parameter denoted by a name.

變量是有名字的參數。

那么子shell確實繼承了父shell中帶有導出屬性的變量或函數。

可參考鏈接: 執行腳本方式的區別

參考鏈接

  1. 關于bashrc profile文件的討論
  2. 關于export數組的討論
  3. export -pf用法
  4. 環境變量和shell變量的區別

擴展閱讀

一般來說,配置交叉編譯工具鏈的時候需要指定編譯工具的路徑,此時就需要設置環境變量。查看已經存在的環境變量:

[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"