🌍 环境变量

📚 什么是环境变量?

环境变量(Environment Variables)是操作系统用来存储配置信息的一种机制。 它们就像是一个全局的配置字典,任何程序都可以读取这些值来了解系统环境或进行相应的配置。

📢 生活类比

想象一下,环境变量就像是学校的公共公告栏

  • 公告栏上贴满了各种信息(环境变量),比如"图书馆在3楼"、"食堂开放时间"等
  • 所有学生(程序)都可以随时查看公告栏,获取需要的信息
  • 如果公告栏上的信息更新了(环境变量改变),所有学生都会看到新信息
  • 不同学校(不同操作系统)的公告栏格式可能不同,但作用是一样的
  • 学生不需要记住所有信息,需要时去公告栏查看即可
操作系统
环境变量存储区
程序A
读取 PATH 变量
+
程序B
读取 JAVA_HOME 变量
+
程序C
读取 API_KEY 变量

❓ 为什么需要环境变量?

1. 跨程序共享配置

多个程序可以共享同一个配置值,无需在每个程序中重复设置。

2. 系统级配置

存储系统级别的设置,如系统路径、用户信息等。

3. 安全性

敏感信息(如API密钥)可以存储在环境变量中,而不是硬编码在程序里。

4. 灵活性

同一程序在不同环境下可以使用不同的配置,无需修改代码。

📋 常见的环境变量

以下是一些在Windows和类Unix系统中常见的环境变量:

PATH 系统可执行文件的搜索路径
HOME / USERPROFILE 用户主目录路径
JAVA_HOME Java安装目录
TEMP / TMP 临时文件目录
USERNAME 当前用户名
OS 操作系统类型

🔍 如何查看环境变量?

Windows PowerShell

# 查看所有环境变量
Get-ChildItem Env:

# 查看特定环境变量
$env:PATH
$env:USERPROFILE

# 或者使用
echo $env:PATH

Windows CMD

# 查看所有环境变量
set

# 查看特定环境变量
echo %PATH%
echo %USERPROFILE%

Linux/Mac 终端

# 查看所有环境变量
env
# 或
printenv

# 查看特定环境变量
echo $PATH
echo $HOME

# 使用 printenv
printenv PATH

Python

import os

# 查看所有环境变量
for key, value in os.environ.items():
    print(f"{key} = {value}")

# 查看特定环境变量
print(os.environ.get('PATH'))
print(os.environ.get('HOME'))

Node.js

// 查看所有环境变量
console.log(process.env)

// 查看特定环境变量
console.log(process.env.PATH)
console.log(process.env.HOME)

🎮 演示

尝试在下面的输入框中输入一个环境变量名,看看它的值:

⚙️ 如何设置环境变量?

临时设置(仅当前会话有效)

# PowerShell
$env:MY_VAR = "我的值"

# CMD
set MY_VAR=我的值

永久设置(系统级)

  1. 右键点击"此电脑" → "属性"
  2. 点击"高级系统设置"
  3. 点击"环境变量"按钮
  4. 在"系统变量"或"用户变量"中添加或编辑变量

永久设置(命令行)

# PowerShell (管理员权限)
[System.Environment]::SetEnvironmentVariable("MY_VAR", "我的值", "User")

临时设置(仅当前会话有效)

# Bash
export MY_VAR="我的值"

# 查看
echo $MY_VAR

永久设置(用户级)

# 编辑 ~/.bashrc 或 ~/.zshrc
echo 'export MY_VAR="我的值"' >> ~/.bashrc
source ~/.bashrc

永久设置(系统级)

# 编辑 /etc/environment (需要sudo权限)
sudo nano /etc/environment

💼 实际应用场景

场景 1: 配置开发环境

设置 JAVA_HOME 指向Java安装目录, 这样所有Java开发工具都能找到正确的Java版本。

场景 2: API密钥管理

将敏感信息如API密钥存储在环境变量中,而不是硬编码在代码里, 提高安全性和代码的可移植性。

# 不好的做法
api_key = "sk-1234567890abcdef" # 危险!

# 好的做法
api_key = os.environ.get('API_KEY') # 安全!

场景 3: 多环境配置

同一程序在不同环境(开发、测试、生产)使用不同的配置:

  • 开发环境:ENV=development
  • 测试环境:ENV=testing
  • 生产环境:ENV=production

⚠️ 注意事项

1. 大小写敏感性

Windows环境变量不区分大小写,但Linux/Mac区分大小写。 建议统一使用大写字母和下划线。

2. 路径分隔符

Windows使用分号(;)分隔路径,Linux/Mac使用冒号(:)。 例如PATH变量:

  • Windows: C:\Windows;C:\Program Files
  • Linux/Mac: /usr/bin:/usr/local/bin

3. 临时 vs 永久

临时设置的环境变量只在当前终端会话中有效,关闭终端后就会消失。 如果需要永久保存,必须使用系统设置或配置文件。

📝 总结

环境变量是操作系统提供的一种全局配置机制,它允许:

  • ✅ 跨程序共享配置信息
  • ✅ 存储系统级设置
  • ✅ 安全地管理敏感信息
  • ✅ 实现灵活的配置管理

掌握环境变量的使用,是每个开发者和系统管理员的基本技能!