環境變數 (Environment Variable)

Windows

環境變數的概念對一般沒接觸過程式的人來說比較難理解一點。

簡單來說,變數就是一個容器,裝著某些資料,而環境變數則是無時無刻都存在系統的背景環境中的一個容器,可以讓我們去存取裝在容器裡面的資料。

Windows 系統內建了許多環境變數,可以透過直接下達指令 set 列出所有的環境變數:

set

直接下達 set 指令會列出所有的環境變數,而我們也可以拿這個指令來新增或修改環境變數。

新增環境變數

set x=123

這樣表示我們設定了一個名稱叫做 x 的環境變數,而它的內容是 123

如果要顯示出來,可以一樣透過執行 set 觀察,或者使用 echo 指令印出該變數的內容:

set x
echo %x%

在 Windows 的命令提示字元中,如果要使用 echo 印出變數,必須將變數名稱前後加上 % 才可以正確列印出 x 裡面的數值 123,而不是只有印出 x 這個字,請自己試試看 echo xecho %x% 的差別。

修改環境變數

修改環境變數的方式和新增環境變數是一樣的,如果環境變數的名稱已存在,則會被修改成新的內容。

set x=456

刪除環境變數

set x=

等號後面不要加上任何東西,就可以刪除該環境變數。

系統環境變數

以上所介紹的環境變數操作方式,只要將「命令提示字元」程式關閉後,該環境變數就會消失,每次關掉程式後都必須重新設定,所以一般而言我們如果需要它長久常駐於系統中而且重新開機後也會存在的話,必須要在另外的地方設定:

控制台\系統及安全性\系統

System

進階系統設定

Advanced System

環境變數

Environment Variable

上方「使用者變數」顯示的是目前登入使用者的獨立設定,下方「系統變數」為整體系統的設定(所有的使用者都會套用這個設定)。

左邊的是變數名稱,右邊的是變數的值(內容),所有的環境變數都可以在這邊做新增、修改、刪除。

系統預設的環境變數很多,我們暫時不需要一一去了解它的用途,只要知道有些軟體安裝或執行的時後會去修改或讀取這裡的數值即可。

如果「使用者的變數」和「系統變數」如果都存在同樣名稱的變數(例如:Path),則兩者的內容都會同時套用(重疊)。

這樣有時候會造成系統判斷優先順序的問題,建議可以把上面的「使用者變數」的 Path 刪除,之後修改或使用都以「系統變數」的 Path 為主。

PATH 環境變數

環境變數中比較重要的就是 PATH

它代表著「系統要到哪些路徑底下找執行檔」。

使用指令 echo %PATH% 把 PATH 環境變數顯示出來,會發現內容全部都是路徑,每個路徑之間又用分號 ; 隔開。

Microsoft Windows [版本 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\user>echo %path%
C:\Program Files\Java\jdk1.8.0_66\bin;C:\Users\user\AppData\Local\Android\sdk\platform-tools;C:\Users\user\AppData\Local
\Android\sdk\tools;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C
:\Program Files\Git\cmd;C:\Program Files\nodejs\;C:\Users\user\node_modules\.bin;C:\gradle\bin

C:\Users\user>

當您在命令列下達指令時(例如:dir),系統會把您輸入的字串(dir)拿去和 PATH 內的路徑一一做比對,如果有找到,就會把那個找到的檔案當作執行檔來執行您所下達的命令。

一般來說每個獨立的軟體都至少會有一個「執行檔」,讓使用者去呼叫使用,例如 dirmkdir 這些都是執行檔,只是這些是屬於系統內建的軟體。

如果我們需要安裝額外的軟體,像是開發工具通常需要設定 PATH 環境變數。

如果沒有把軟體本身「可執行檔的路徑」設定在 PATH 環境變數中的話,則每次執行該命令必須使用以下兩種方式:

  • 到該程式所在的執行檔目錄底下執行
  • 輸入執行檔的完整路徑

例如:

平常大家常用到的 JAVA,基本上它的執行檔 java.exe 是對應到以下這個路徑

C:\ProgramData\Oracle\Java\javapath\java.exe

預設的情況下,安裝好 Java 後,在任何一個目錄底下都可以正常執行 java 這個執行檔。

(例如 C:\ 底下,或者家目錄 C:\Users\user 底下)

C:\>java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

C:\>cd C:\Users\user

C:\Users\user>java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

java 命令都可以正常執行是因為 Java 在安裝的時候,安裝程式自動幫您把它執行檔的所在路徑加入了 PATH 環境變數,如果您手動把這段路徑從 PATH 內刪除的話,然後重新開啟「命令提示字元」後再執行 java,此時就會出現錯誤訊息:

C:\Users\user>java
'java' 不是內部或外部命令、可執行的程式或批次檔。

若沒有把程式路徑加入 PATH 卻又想要呼叫該程式,則必須輸入執行檔的完整路徑,例如:

C:\ProgramData\Oracle\Java\javapath\java.exe -version

但一般來說我們都不希望以這樣子方式去下達命令,因為路徑時在太長了!

所以我們會把「執行檔的路徑」加入 PATH 中,方便日後每一次呼叫程式使用。

通常開發工具都會需要用到命令列,所以在安裝完開發工具後,要確保開發工具的執行檔路徑都有加入 PATH 環境變數,方便我們日後使用。

P.S. 不是每一個軟體安裝後都需要做這個動作,只有需要在命令列(Command Line)底下會用到的執行檔才需要將該路徑加入 PATH(通常都是開發工具)