${VAR:-default}提供临时替代值,即变量未设置或为空时返回默认值但不修改原变量,适用于命令参数、输出等一次性场景。

用 ${VAR:-default} 语法最安全,它只在变量未设置或为空时提供临时值,不改变原变量本身。
什么是“临时替代值”
指不修改原始变量、仅在当前引用处生效的备用内容。比如 FILE 没定义,但你想在 echo 中显示 /tmp/data,又不想真把 /tmp/data 写进 FILE 变量里。
核心写法:${VAR:-value}
这是最常用也最推荐的方式:
- 若 VAR 未声明(unset)或值为空(""),表达式返回 value
- VAR 本身的值完全不变,后续调用仍为原状态
- 适合用于命令参数、echo 输出、条件判断等一次性场景
示例:
unset FILE<br>echo "Path: ${FILE:-/tmp/default}" # 输出 Path: /tmp/default<br>echo "FILE is still: '$FILE'" # 输出 FILE is still: ''其他类似语法的区别要点
别混淆这几个带冒号的结构:
- ${VAR-value}:不检查空字符串,只在未声明时生效(VAR="" 时仍返回空)
- ${VAR:=value}:会真正给 VAR 赋值,属于“永久默认”,不是临时
- ${VAR:+value}:只在 VAR 非空时返回 value,用途相反
- ${VAR:?msg}:为空时报错退出,不是替代,而是防御性检查
实际使用建议
写脚本时优先用 ${VAR:-default} 处理可选配置:
- 路径 fallback:logdir=${LOG_DIR:-/var/log/myapp}
- 用户名兜底:user=${USER:-anonymous}
- 避免空值导致命令失败:cp file.txt ${DEST_DIR:-.}/

















