6.1 什么是環(huán)境變量
- shell 中用來存儲(chǔ)有關(guān) shell 會(huì)話和工作環(huán)境的變量绞蹦,被叫做 環(huán)境變量( Environment Variable )
- 環(huán)境變量 被存儲(chǔ)在內(nèi)存中,方便程序或在 shell 中運(yùn)行的腳本能輕松訪問
- shell 中的環(huán)境變量分為兩類
- 全局環(huán)境變量
- 局部環(huán)境變量
6.1.1 全局環(huán)境變量
-
全局環(huán)境變量 之所以被叫做 全局 榜旦,是因?yàn)槠鋵?duì)于 父 shell 和所有生成的 子 shell 會(huì)話都是可見的
- 但 局部環(huán)境變量 只對(duì)創(chuàng)建它們的 shell 可見
- Linux 內(nèi)置了很多默認(rèn)的 全局環(huán)境變量 幽七,會(huì)在用戶登錄 shell 時(shí)依次加載,這種 全局環(huán)境變量 被叫做 系統(tǒng)環(huán)境變量
- 系統(tǒng)環(huán)境變量 基本上都是使用全大寫字母溅呢,用來區(qū)別用戶自行創(chuàng)建的環(huán)境變量
6.1.1.1 env 命令和 printenv 命令查看全局環(huán)境變量
- 使用
env
命令和printenv
命令可以查看當(dāng)前系統(tǒng)的全局環(huán)境變量澡屡,如下圖
6.1.1.2 echo 命令查看全局環(huán)境變量
使用 echo 命令也可以查看單個(gè)變量的值,但語法稍微復(fù)雜一點(diǎn)咐旧,需要在變量名稱前加一個(gè)美元符號(hào) 驶鹉,如下圖
6.1.2 局部環(huán)境變量
局部環(huán)境變量 只能在創(chuàng)建它們的會(huì)話中使用
Linux 同樣內(nèi)置了很多默認(rèn)的 局部環(huán)境變量
6.1.2.1 set 命令查看局部環(huán)境變量
Linux 沒有內(nèi)置專門用來查看 局部環(huán)境變量 的命令
使用 set 命令只是可以在執(zhí)行結(jié)果中順便看到 局部環(huán)境變量,如下圖
除了 局部環(huán)境變量 铣墨,還會(huì)顯示 全局環(huán)境變量 室埋,以及用戶自定義環(huán)境變量
顯示結(jié)果是按字母排序的
6.2 設(shè)置用戶定義變量
6.2.1 設(shè)置局部用戶定義變量
- 定義局部用戶變量不需要使用任何命令,直接定義一個(gè)變量名踏兜,并通過等號(hào)賦值即可词顾,如下圖
- 定義變量并賦值后,可以使用 echo $variable 命令來顯示變量值
- 如果變量值存在空格碱妆,就不能直接賦值,需要將變量值用雙引號(hào)包裹
6.2.2 export 命令設(shè)置全局環(huán)境變量
- 使用
export
命令并不能直接定義 全局環(huán)境變量 - 需要先定義一個(gè) 局部環(huán)境變量 昔驱,再使用
export
命令將這個(gè)變量提升為 全局環(huán)境變量 疹尾,如下圖- 在 父 shell 中定義的局部變量,使用
export
命令提升后骤肛,在 子 shell 中也能夠順利訪問 -
需要注意的是 纳本,使用
export variable
命令時(shí),變量名前面不需要在美元符號(hào)
- 在 父 shell 中定義的局部變量,使用
6.3 unset 命令刪除環(huán)境變量
- 使用
unset
命令可以刪除定義的環(huán)境變量腋颠,如下圖- 使用
unset variable
命令后繁成,就無法使用echo $variable
訪問到對(duì)應(yīng)變量,說明變量已經(jīng)被刪除
- 使用
設(shè)計(jì)環(huán)境變量名時(shí)候淑玫,什么時(shí)候使用面睛,記住:用到變量時(shí)尊搬,加$叁鉴;操作變量時(shí),不用加佛寿。
和修改變量一樣幌墓,在子shell中刪除全局變量后,無法將效果反映到父shell中冀泻。
6.5 設(shè)置 PATH 環(huán)境變量
- PATH 是一個(gè)很關(guān)鍵的 系統(tǒng)環(huán)境變量 常侣,它定義了 用于進(jìn)行命令和程序查找的目錄 ,如下圖
- 在第 5 章介紹過 shell 命令分為 內(nèi)建命令 和 外部命令
- 我們之所以能直接使用 外部命令 弹渔,就是因?yàn)樵?PATH 中將存放 外部命令 的目錄進(jìn)行了指定
- PATH 中的不同目錄袭祟,使用
:
進(jìn)行分隔 - 如果某個(gè)命令或程序的位置不包含在 PATH 指定的目錄中,則無法進(jìn)行全局調(diào)用
6.5.1 為 PATH 添加自定義目錄
- PATH 中的目錄默認(rèn)情況下都是系統(tǒng)預(yù)置的捞附,一般就包括用于存放 外部命令 的 /bin 巾乳、/usr/bin 、/sbin 鸟召、/usr/sbin 目錄
- 如果想要讓其他程序的命令也能夠全局訪問胆绊,例如安裝 JDK 環(huán)境后一般都需要配置環(huán)境變量
- 只需要使用
PATH=$PATH:customCommandDirectory
即可- 這句命令的意思就是為 PATH 變量追加一個(gè)自定義的命令目錄,相當(dāng)于其他語言中的
+=
操作
- 這句命令的意思就是為 PATH 變量追加一個(gè)自定義的命令目錄,相當(dāng)于其他語言中的
- 不過這種直接在 shell 會(huì)話中執(zhí)行的添加操作欧募,是一次性的 压状,如果當(dāng)前會(huì)話退出,或系統(tǒng)重啟跟继,這一次的配置操作也會(huì)隨之失效
6.6 定位系統(tǒng)環(huán)境變量
上一節(jié)介紹到為 PATH 添加自定義目錄种冬,但實(shí)現(xiàn)的效果是一次性的
要了解如何讓自定義的環(huán)境變量持久化存在與系統(tǒng)中,需要先了解 shell 的三種啟動(dòng)方式
- 登錄式 shell :登錄時(shí)作為默認(rèn) shell 啟動(dòng)
- 交互式 shell :在當(dāng)前 shell 會(huì)話中通過 bash 命令或 zsh 命令啟動(dòng)的各種類型 子 shell
- 非交互式 shell :在當(dāng)前 shell 會(huì)話中通過腳本運(yùn)行的 shell
6.7 數(shù)組變量
環(huán)境變量可以作為數(shù)組使用舔糖。
數(shù)組:儲(chǔ)存多個(gè)值的變量娱两。
要給某個(gè)環(huán)境變量設(shè)置多個(gè)值,可以放在括號(hào)里金吗,值與值之間空格分隔十兢。
6.8 小結(jié)
- Linux 中的環(huán)境變量分為 全局環(huán)境變量 和 局部環(huán)境變量
- 全局環(huán)境變量 可以在父子級(jí)之間訪問,但父級(jí)定義的 全局環(huán)境變量 對(duì)于子級(jí)來說是只讀的
- 局部環(huán)境變量 無法在父子級(jí)之間訪問摇庙,只能在定義該變量的會(huì)話中訪問
- PATH 是一個(gè)很關(guān)鍵的 全局環(huán)境變量 旱物,也叫 系統(tǒng)環(huán)境變量 ,其為 shell 執(zhí)行各種命令指定了搜索目錄
- PATH 支持自定義修改卫袒,可以將各種不是系統(tǒng)自帶的命令加入其中宵呛,從而實(shí)現(xiàn)命令的全局訪問
- shell 的啟動(dòng)方式分為三種,分別是 登錄式 shell 夕凝、交互式 shell 宝穗、非交互 shell
- /etc/profile 是 shell 的主啟動(dòng)文件户秤,在 登錄式 shell 啟動(dòng)時(shí)會(huì)被訪問
- .bashrc 是用于存放用戶自定義變量的持久化文件,在 登錄式 shell 和 交互式 shell 啟動(dòng)時(shí)會(huì)被訪問
- 環(huán)境變量數(shù)組 是一個(gè)即不好用讽营,也不常用的特性
部分內(nèi)容轉(zhuǎn)載來自:作者:asing1elife 鏈接:http://www.reibang.com/p/dd034ef26dec