什么是环境变量?
环境变量(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.environ 或 process.env,你就知道他们在干什么了。