🏠 首页 攻略 环境变量是什么?程序员的万能配置抽屉

环境变量是什么?程序员的万能配置抽屉

环境变量是操作系统提供的一种全局配置机制,几乎所有开发框架都在用它管理密钥、路径和开关。一文搞懂它的原理和用法。

什么是环境变量?

环境变量(Environment Variables)是操作系统提供的一组键值对,任何运行中的程序都能读取它们。

打个比方:你的电脑是一个办公室,每个程序都是一个员工。环境变量就是办公室墙上贴的一张便签纸——上面写着打印机在哪、老板的邮箱是什么、茶水间几点关门。每个员工进来都能看到这张便签,按上面的信息办事。

常见的系统自带环境变量有:

  • PATH:告诉系统去哪里找可执行文件(比如你输入 git,系统就去 PATH 列出的目录里找 git 程序)
  • HOME:你的家目录路径
  • USER:当前登录的用户名
  • LANG:系统使用的语言

为什么要用环境变量?

你可能会问:直接在代码里写死配置不行吗?

可以,但有三个大问题:

第一,安全性。 把数据库密码写在代码里,一旦代码上传到 GitHub,全世界都能看到你家的钥匙在哪。环境变量可以把敏感信息隔离在代码之外。

第二,灵活性。 同一个程序,开发环境和生产环境需要的配置往往不同。用环境变量,改一行配置就能切换,不用改代码。

第三,共享性。 多个程序可以共用同一组环境变量,统一管理。

这就是为什么几乎所有现代框架都推崇"十二要素应用"原则——第一条就是把配置存到环境变量里。

怎么用环境变量?

在命令行里查看

# 查看所有环境变量
env

# 查看单个变量
echo $HOME
echo $PATH

# 查看某个变量,没有则显示默认值
echo ${MY_VAR:-默认值}

在命令行里设置

# 临时设置(关掉终端就没了)
export API_KEY=abc123

# 只在当前命令生效
API_KEY=abc123 node server.js

在项目中使用

大多数项目会创建一个 .env 文件来集中管理环境变量:

DATABASE_URL=postgresql://localhost/mydb
SECRET_KEY=my-secret-key-123
DEBUG=true
PORT=3000

然后用相应的库加载它。比如 Node.js 用 dotenv,Python 用 python-dotenv

注意:.env 文件应该加入 .gitignore,不要提交到版本控制系统。

在 Docker 中传递

docker run -e DATABASE_URL=postgres://localhost/db myapp

或者在 docker-compose.yml 里:

services:
  web:
    environment:
      - DATABASE_URL=postgres://localhost/db
      - SECRET_KEY=abc123

在生产服务器上

通常通过服务器配置文件或运维平台注入。比如 Nginx 里:

location / {
    proxy_set_header X-API-Key $api_key;
}

或者用 Kubernetes 的 ConfigMap 和 Secret 资源。

常见陷阱

陷阱一:忘记 export。 在 Bash 里直接赋值 KEY=value 只是设置了本地变量,子进程看不到。必须 export KEY=value 才行。

陷阱二:引号问题。 如果值里包含空格或特殊字符,一定要加引号:export GREETING="Hello World"

陷阱三:覆盖系统变量。 不小心覆盖了 PATH 或 HOME 可能导致命令找不到。设置前最好先备份原值。

陷阱四:把生产密钥放到开发环境的 .env 里。 虽然 .env 不被提交,但同事可能看到你的文件。敏感信息要用专门的密钥管理服务。

总结

环境变量就像是程序员的万能配置抽屉——把易变的配置从代码里抽出来,放到一个安全、灵活的地方统一管理。

不管你是写 Python、Node.js、Go 还是 Java,都会跟环境变量打交道。理解它的工作原理,能帮你避开很多配置相关的坑。

下次看到别人代码里有 os.environprocess.env,你就知道他们在干什么了。