You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell参数展开中末尾短横线(${VAR-})的作用是什么?

Bash参数扩展中末尾短横线的作用

这是Bash里的参数默认值替换语法简化形式,核心作用是提升脚本在严格模式下的健壮性,具体差异如下:

  • 当使用 ${ENV_OVERRIDE-} 时:
    不管环境变量 ENV_OVERRIDE 是未定义,还是已定义但为空值,这个表达式都会展开成空字符串,而且不会触发任何错误。哪怕你开启了Shell的严格模式(set -u,该模式下引用未定义变量会直接报错终止脚本),脚本也能正常执行。

  • 当直接写 ${ENV_OVERRIDE} 时:
    如果没开set -u,两种写法表现确实一致;但一旦开启严格模式,只要ENV_OVERRIDE未被定义,脚本会立刻抛出bash: ENV_OVERRIDE: unbound variable的错误并终止,根本走不到后续逻辑。

举个实际测试例子:
开启严格模式后,带短横线的脚本能正常跑完:

set -u
if [[ ! -z "${ENV_OVERRIDE-}" ]]; then
    CFG="some/path/$ENV_OVERRIDE.conf"
fi
echo "脚本执行完成"

而不带短横线的脚本会直接报错:

set -u
if [[ ! -z "${ENV_OVERRIDE}" ]]; then
    CFG="some/path/$ENV_OVERRIDE.conf"
fi
echo "脚本执行完成"

简单说,这个短横线就是给变量加了个“容错兜底”:就算变量没定义,也不会搞崩脚本,尤其适合需要兼容严格模式的场景。

内容的提问来源于stack exchange,提问作者codeforester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:22:07