什麼是環境變數?
我們可能常常會碰到配置環境變數的問題,那麼什麼是環境變數?
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. 最近稍微有點忙,所以演算法入門寫的很慢,各位見諒。


TAG:DateWithCodes |