Windows用%变量名%、macOS/Linux用$变量名或${变量名}实现变量嵌套展开,需注意非实时更新、禁止循环引用,Python中需os.path.expandvars()手动展开。

在环境变量中引用系统自带的变量(比如 USERPROFILE、SystemRoot、PATH 等),本质是“变量嵌套”或“变量展开”,不同操作系统语法略有差异,但核心思路一致:用特定符号包裹已有变量名,让系统在解析时自动替换为它的值。
Windows 中引用系统变量
使用 %变量名% 语法,支持在新建/编辑变量值时直接调用。
- 例如,想把 Python 的 Scripts 目录加到 PATH,又不想硬编码用户路径,可写成:
%USERPROFILE%\AppData\Local\Programs\Python\Python312\Scripts - 再如,设置一个自定义变量 MY_PROJECT_ROOT 指向系统盘 Windows 目录:
%SystemRoot% - 注意:不能跨行、不能有空格干扰;多个变量可连用,如 %USERPROFILE%\Desktop\myenv
macOS / Linux 中引用系统变量
使用 $变量名 或 ${变量名} 语法,通常在 shell 配置文件(如 .zshrc 或 .bashrc)中生效。
- 添加 Python 路径时常用:
export PATH="$HOME/bin:$PATH" - 更安全的写法(防变量为空导致错误):
export PATH="${HOME}/local/bin:${PATH}" - 也可用命令替换扩展,比如:
export MY_TMP="${TMPDIR:-/tmp}"(有值取 TMPDIR,否则默认 /tmp)
注意事项和常见问题
引用不是实时计算,而是在变量被读取时展开。因此:
- 修改了被引用的源变量(如 USERPROFILE)后,依赖它的变量不会自动更新——需重启终端或重新加载配置
- 在 Windows “环境变量” 图形界面里,%…% 写法只在“值”栏生效;变量名本身不能含 %,也不能写成 %%USERPROFILE%%
- 避免循环引用,例如 A=%B%,B=%A% —— 系统可能报错或返回空值
- Python 代码中无法直接解析这种嵌套语法:
os.getenv("MY_PATH")返回的是字符串%USERPROFILE%\xxx,不是展开后的路径;如需展开,得用os.path.expandvars()


















