環境變量是作業系統提供給程序的一組鍵值對參數,程序透過它們獲取運行上下文資訊。常見的如 PATH、SHELL、HOME 等。掌握如何在 C 語言中讀取環境變量,是系統編程的基礎技能之一。
在終端中可使用以下命令檢視環境變量:
echo $VAR_NAME:查看單一變量值(需知道變量名)。set:顯示當前 Shell 所有變量(含 Shell 內部變量)。env:顯示當前進程的環境變量(範圍比 set 更接近進程實際環境)。$ echo $SHELL
/bin/bash
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ env | head -5
LC_PAPER=zh_CN.UTF-8
TERM=xterm
SHELL=/bin/bash
USER=talk8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
getenv()C 標準庫提供 getenv() 根據名稱獲取環境變量值,原型如下:
#include <stdlib.h>
char *getenv(const char *name);
NULL。範例程式碼:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const char *key = "SHELL";
char *value = getenv(key);
if (value) {
printf("The value of %s is %s\n", key, value);
} else {
printf("No value found for %s\n", key);
}
return 0;
}
執行結果與 echo $SHELL 一致:
The value of SHELL is /bin/bash
environ 全域變量若需像 env 命令一樣列出所有環境變量,C 語言無現成函數,但可使用外部全域變量 environ。它是一個指向字串指標陣列的指標,陣列以 NULL 結尾。
extern char **environ; // 需先聲明
int main(void) {
char **env = environ;
while (*env != NULL) {
printf("%s\n", *env);
env++;
}
return 0;
}
關鍵點:
extern char **environ;。NULL。執行結果將與 env 命令完全一致。
| 方法 | 適用場景 | 對應 Shell 命令 |
|---|---|---|
getenv(name) | 已知變量名,獲取單一值 | echo $VAR |
environ 遍歷 | 列出所有環境變量 | env 或 set |
完整範例程式碼可至筆者資源區下載。下一回將繼續分享更多 C 語言實戰技巧,敬請期待。