首先我們需要知道Linux的環境變量分為兩部分
全局環境變量
"env"
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL5EGZykTY5UjZjdTM2IjNjFzM4kTN5gzN1kzNygTN0QGMhF2NzczYl9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
局部環境變量+全局環境變量
“set”
我們之前改動的"etc/profile"中的"PATH"便是其中一個全局環境變量
比較遺憾的是,我找不到隻顯示局部變量的指令,是以隻能手動找不同了
在這裡我們可以發現下圖比上圖多出了這些地方
為什麼會有這些差別呢,首先我們就需要知道這些變量的一些資訊
簡而言之,全局環境變量對于shell會話和所有生成的子shell都是可見的
那"可見"是什麼意思呢?簡單,"printenv"一下
出來的這些就是"可見"的表現了,實際上我們還能使用"env"查詢
但是相比“env”而言,"printenv"還能顯示單條的變量,而“env”不能。
如
除了"printenv"外。"echo $XXXX"也有同樣的效果
局部環境變量
局部環境變量相比于全局環境變量,他們隻能見于定義他們的程序之中
但這并不意味着它們不重要,相反,它們和全局環境變量一樣重要。
這裡我們就講一個局部環境變量的應用
使用者自定義變量
當我們啟動了一個shell程序的時候,這個程序的局部環境變量或者說使用者環境變量就會被建立出來
它不會以持久的形式進行儲存,意味着我們可以查詢,增加,變動和删除這些局部環境變量
異常簡單不是嗎?在我們後面學習shell腳本的時候,這個操作非常有用
但是越是簡單的地方,就越需要注意
首先我們可能會把程式設計的習慣帶到這裡
比如我在編碼的時候喜歡在等号前後隔一個空格來增加代碼辨識度。自認為是一個好習慣,但是在這裡,會産生錯誤
同時我們要注意,用這種方法建立的局部環境變量隻能在建立它的shell下可用,包括它建立的子shell也無法使用
那麼全局環境變量又如何呢?
這裡我們就要使用前文中使用的指令"export"
export 的基本文法是 “exprot XXXX”
此時我們便可以在子shell下通路到父shell建立的環境變量了
我們把“export”和之前的值結合一下
是不是和之前我們設定“PATH”的時候差不多呢
沒錯,我們之前使用export設定PATH便是在設定一個全局環境變量,這個全局環境變量便使得我們能夠通路那些目錄下的指令
但是我們要注意一點,我們在子shell下設定的全局環境變量無法被建立它的父shell以及父shell新建立的子shelll所通路的
這意味着它同樣不是持久的,也隻是存在于shell當中,受shell的生命周期控制的
那麼,讓我們回到一開始的問題
在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了呢?
答:
我們用“export”指令将本shell中的環境變量改回正确的路徑,使得shell能根據正确的PATH尋找相關指令
你甚至可以直接鍵入"PATH=/usr/bin"建立局部環境變量來使shell能正确通路放有Linux常用軟體。
PS
為什麼"export"在PATH設定出錯的時候仍能使用呢?
因為它使bash内置的指令,同樣是的還有"set",感興趣的同學可以自己試試