當前位置:
首頁 > 最新 > 什麼是環境變數?

什麼是環境變數?

我們可能常常會碰到配置環境變數的問題,那麼什麼是環境變數?

01

案例

如果大家用過命令行(或者沒有使用過,這裡會演示),應該就知道我們在Windows下摁下win + r,在彈出的的運行框中輸入cmd,那麼:

黑框+1。如果使用PowerShell,結果應該是大同小異的。這裡使用cmd來進行演示。

比方說我們需要新建一個文件夾,名字叫做 repos。 那麼使用 mkdir 命令:

沒有任何提示,直接蹦出下一行。那麼根據「沒有消息就是好消息」的命令行法則,我們成功創建了一個名為repo的文件夾。創建在哪?大家肯定想到了路徑組合:將前面的一串路徑(被稱為當前cmd的工作目錄)和repo結合,得到 C:Userszhumoumou
epo 那麼便是剛剛創建的文件夾。確實是這樣。

我們知道,mkdir是cmd內建 (built-in,大概就是自帶的意思) 的指令,如果我們需要用非cmd自帶指令怎麼辦呢?cmd會按照下列順序查找指令的位置!

若我們輸入的指令無後綴 (.exe .com .msc .bat) 那麼順序如下,查找到可執行文件後會立即執行,停止查找:

1. 查找cmd內建的指令:比如上文中的 mkdir/md。其他內建指令可以百度搜到。

2. 對文件名添加後綴(.exe .com .msc .bat) 查找c:windowssystem32 (就是cmd.exe的同一目錄)下是否有對應的可執行文件。

比如 tasklist 就不是cmd的內建指令,它存放於c:windowssystem32 目錄下。cmd發現tasklist不是內建指令後,添加.exe後綴構成 tasklist.exe,在c:windowssystem32下查找,找到後運行。

3. 添加後綴,查找環境變數Path 中所對應的目錄(可能有多個)下是否含有這個名稱的文件。

作者的python.exe安裝在d: oolspython 文件夾下,若作者添加 d: oolspython 到環境變數中:

右擊我的電腦,屬性,高級系統設置,然後再點擊「環境變數」:

添加一個新的路徑,那麼cmd.exe就可以查找到python的安裝位置了!命令行直接輸入python便可以直接運行python.exe

4. 添加後綴,在當前目錄下查找可執行文件。

5. 若前4步均沒有找到同名可執行文件,報錯。

現在我們就知道環境變數是做什麼用的了:它並不是專門為cmd.exe設計的,任何程序都可以讀取環境變數,然後根據環境變數做一些事情。比如cmd.exe就利用環境變數"Path"來查找可執行的程序。我們將一些常用的可執行文件所在目錄設置到 Path 下,便無需將當前工作目錄指向文件所在目錄即可快速運行對應程序。比分說若作者沒有配置python的環境變數,那麼我需要:

或者:

首先,這樣可能會比較麻煩;其次,若不設置Path,那麼通過命令行來調用編譯器及其他工具的一些IDE將無法正常工作!這就是為什麼我們往往在配置IDE時會遇到環境變數問題的主因:IDE通過命令行調用編譯器及其他工具,而無需知道工具的確切位置!

02

環境變數的用法

首先我們需要明確一點:環境變數並不只是 Path。 我們可以自定義一個環境變數。打開環境變數的定義窗口:

先解釋一下什麼是用戶變數,什麼是系統變數。WIndows是多用戶的操作系統,那麼顧名思義,用戶變數僅對當前用戶生效,別的用戶無效;而系統用戶對所有用戶都生效。我們在任意一個位置」新建「一個環境變數。別擔心,這樣並不會把電腦搞得更糟糕。

如圖所示,當然你也可以有自己的配置。為了演示,我們在變數值中填寫一個目錄(其實它可以是任意字元串,但一般是一個目錄)。點擊確定。

接下來打開你的資源管理器(我的電腦)。在地址欄輸入 %my_env_var%

回車,它會馬上將此環境變數解釋為其變數值:C:program files 因此,我們就打開了這一個目錄。還有其他的用法,看圖:

幾乎在任意需要填寫路徑的地方,都可以使用環境變數。

那麼我們的C語言程序如何獲取指定環境變數的值?標準庫早就為我們準備好了。比如我們需要獲得 Path 的值:

#include

#include

int main(void)

{

char *pathvar;

pathvar = getenv("PATH");

printf("pathvar=%s",pathvar);

return 0;

}

注意,由於getenv()函數定義在 stdlib.h 標準庫中,所以它是可移植的。這段代碼在 Unix 上也可以正確運行。

在 C++ 中,就使用 std::getenv() 即可。

Ps. 最近稍微有點忙,所以演算法入門寫的很慢,各位見諒。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 DateWithCodes 的精彩文章:

TAG:DateWithCodes |