环境变量支持嵌套引用但语法因系统而异:Linux/macOS用$VAR_NAME或${VAR_NAME},支持默认值${VAR:-default};Windows CMD用%VAR_NAME%,不支持默认值;PowerShell用$env:VAR并支持字符串插值;所有系统均为静态展开,非动态更新。

环境变量中引用其他变量的写法
在操作系统层面,环境变量支持“变量嵌套”或“变量展开”,即一个变量的值可以包含另一个已定义变量的引用。这种写法常见于 Linux/macOS 的 shell(如 bash、zsh)和 Windows 的命令提示符或 PowerShell,但语法略有不同。
Linux/macOS 中的写法
使用 $VAR_NAME 或 ${VAR_NAME} 形式引用已有变量,可直接用于赋值语句中:
-
基础引用:假设已有
HOME=/home/user,可这样定义新变量:MY_DIR=$HOME/myproject或MY_DIR=${HOME}/myproject -
嵌套引用需用花括号:如
PROJECT=app,想写成BIN_DIR=${PROJECT}_bin,必须加{},否则$PROJECT_bin会被解释为变量PROJECT_bin(不存在) -
支持默认值展开:
PORT=${PORT:-8080}表示若PORT未设置或为空,则取8080
Windows 命令行(CMD)中的写法
使用 %VAR_NAME% 格式,支持简单嵌套:
- 已设
set HOME=C:\Users\Alice,可写:set MY_DIR=%HOME%\myproject - 不支持默认值语法(如
%VAR:-default%),也不支持复杂展开 - PowerShell 更灵活,可用
$env:HOME引用,并在双引号字符串中直接插值:$env:MY_DIR = "$env:HOME\myproject"
注意事项
这类引用只在变量定义时展开一次,属于静态展开,不是运行时动态求值。例如:
- 先执行
export A=1; B=$A; echo $B输出1 - 再执行
A=2; echo $B仍输出1——B并不会随A变化而更新 - 不能在环境变量定义中递归引用自身,会导致展开失败或空值

















