作者丨良許 來源丨良許Linux(ID:liangxuxiansheng) 大家好,我是良許。 大家都知道,在 Linux 系統(tǒng)中,有環(huán)境變量和 Shell 變量這兩種變量。 環(huán)境變量是在程序及其子程序中全局可用的,常常用來儲(chǔ)存像默認(rèn)的文本編輯器或者瀏覽器,以及可執(zhí)行文件的路徑等等這樣的信息。而 Shell 變量僅在當(dāng)前 Shell 中可用,可以用來存儲(chǔ)當(dāng)前用戶的 ID 等信息。 那么什么是環(huán)境變量,什么是 Shell 變量,該如何設(shè)置和查看這兩種變量呢? 接下來,讓良許為你解答: 環(huán)境變量是以鍵值對的形式實(shí)現(xiàn)的,是在整個(gè)系統(tǒng)范圍內(nèi)都可用的變量,并由所有派生的子進(jìn)程和 Shell 繼承。而環(huán)境變量的名稱是區(qū)分大小寫的,且通常以大寫的形式命名 ( MYVAR1, MYVAR2... ) 單個(gè)值的環(huán)境變量看起來是這樣的: KEY=value1 如果你想要將多個(gè)值賦予環(huán)境變量,則通常用冒號(hào) ( : ) 作為分隔符。每一對鍵值對最終看起來是這樣子的: KEY=value1:value2:value3 如果要賦予環(huán)境變量的值包含空格,則需要使用引號(hào): KEY='value with spaces' Shell 變量是專門用于設(shè)置或定義它們的 Shell 中的變量。每個(gè) Shell ,例如 zsh 和 bash ,都有一組自己內(nèi)部的 Shell 變量。它們通常用于跟蹤臨時(shí)數(shù)據(jù),比如當(dāng)前工作目錄,而用法則與環(huán)境變量相同。 如果你想讓 Shell 變量作為全局變量使用,可以使用 $ export MYVAR=lxlinux.net$ echo $MYVARlxlinux.net$ env | grep MYVARMYVAR=lxlinux.net 一些環(huán)境變量和 Shell 變量是非常有用的,并且經(jīng)常會(huì)被引用。以下是一些常見的,你以后可能會(huì)遇到的環(huán)境變量:
除了以上這些環(huán)境變量,你也可能會(huì)經(jīng)常遇到以下這些 Shell 變量:
在 Linux 系統(tǒng)中,有以下幾種命令可以讓你查看環(huán)境變量:
默認(rèn)狀態(tài)下, $ printenv SSH_CONNECTION=10.0.2.2 37182 10.0.2.15 22 LESSCLOSE=/usr/bin/lesspipe %s %s LANG=C.UTF-8 XDG_SESSION_ID=5 USER=alvin MYVAR=lxlinux.net PWD=/home/alvin HOME=/home/alvin SSH_CLIENT=10.0.2.2 37182 22 XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop SSH_TTY=/dev/pts/0 MAIL=/var/mail/alvin TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LOGNAME=alvin XDG_RUNTIME_DIR=/run/user/1000 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin LESSOPEN=| /usr/bin/lesspipe %s _=/usr/bin/printenv 只有在更具體的功能上才能體現(xiàn)出 $ printenv SHELL/bin/bash$ printenv HOME/home/alvin$ printenv MYVARlxlinux.net
env MYVAR=lxlinux.net command_to_run command_options
$ setBASH=/bin/bashBASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepathBASH_ALIASES=()BASH_ARGC=()BASH_ARGV=()BASH_CMDS=()BASH_COMPLETION_VERSINFO=([0]='2' [1]='8')BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=([0]='4' [1]='4' [2]='20' [3]='1' [4]='release' [5]='x86_64-pc-linux-gnu')BASH_VERSION='4.4.20(1)-release'COLUMNS=140DIRSTACK=()EUID=1000GROUPS=()HISTCONTROL=ignorebothHISTFILE=/home/alvin/.bash_historyHISTFILESIZE=2000HISTSIZE=1000HOME=/home/alvinHOSTNAME=ubuntu-bionicHOSTTYPE=x86_64IFS=$' \t\n'LANG=C.UTF-8LESSCLOSE='/usr/bin/lesspipe %s %s'LESSOPEN='| /usr/bin/lesspipe %s'LINES=35LOGNAME=alvin..... 該命令將顯示一個(gè)包含所有變量的大列表,因此你可能會(huì)希望將輸出傳遞給 $ set | less Linux 系統(tǒng)中可以設(shè)置環(huán)境變量的命令有以下幾種:
為了更好地理解 Shell 變量和環(huán)境變量之間的區(qū)別,我們先從設(shè)置 Shell 變量開始講,然后再講環(huán)境變量。 先從在當(dāng)前會(huì)話中定義一個(gè) Shell 變量開始: $ MYVAR=lxlinux 你可以用 $ echo $MYVAR lxlinux 使用 $ printenv MYVAR 沒有輸出返回,這就意味著 MYVAR 變量并不是環(huán)境變量。
$ export MYVAR 你可以用以下語句檢驗(yàn): $ printenv MYVARlxlinux 當(dāng)然,你也可以只用一行代碼來設(shè)置環(huán)境變量: $ export MYNEWVAR='My New Variable' 但是以這種方式創(chuàng)建的環(huán)境變量只能用于當(dāng)前會(huì)話,如果你打開一個(gè)新的 Shell 會(huì)話,或者退出登陸,所有的變量都將會(huì)丟失。 我們也可以將環(huán)境變量還原為 Shell 變量,或者將其完全刪除: MYVAR 變量被定義為環(huán)境變量,我們可以通過輸入以下代碼將其還原為 Shell 變量: $ export -n MYVAR 這樣,MYVAR 變量就不再是環(huán)境變量了,但依然還是 Shell 變量。 無論是 Shell 變量還是環(huán)境變量,想要完全刪除變量,都可以使用 $ unset MYVAR 可以通過以下語句來驗(yàn)證 MYVAR 變量已經(jīng)刪除: $ echo $MYVAR 由于變量已經(jīng)刪除了,所以沒有任何返回。 許多程序都需要使用環(huán)境變量來決定具體的執(zhí)行方式,但是,我們并不希望每次啟動(dòng)新的 Shell 會(huì)話時(shí)都必須重新設(shè)置重要的變量,因此我們需要將重要的環(huán)境變量寫入配置文件中。 Shell 會(huì)話有不同的啟動(dòng)方式,比如,連接到終端的交互式 Shell 與未連接到終端的非交互式 Shell,還有登錄式 Shell 與非登錄式 Shell, 而 bash Shell 會(huì)根據(jù)會(huì)話不同的啟動(dòng)方式而讀取不同的配置文件。 但是,在大多數(shù) Linux 發(fā)行版中,當(dāng)你啟動(dòng)一個(gè)新的 Shell 會(huì)話時(shí),一般都會(huì)從以下文件中讀取環(huán)境變量:
如果要將新的環(huán)境變量加載到當(dāng)前的 Shell 會(huì)話中,可以使用source命令: $ source ~/.bashrc 如果你想要設(shè)置環(huán)境變量,你就可以考慮將其添加到 |
|