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

Bash变量赋值时双引号的使用规则及必要性验证

你的判断完全正确,赋值语句里的这组双引号不是必需的。

核心原因

Bash 对直接出现在变量赋值符号=右侧的内容,会自动跳过「单词拆分」和「路径通配符展开」步骤,因此哪怕${BAR:-}的默认值里包含空格、换行或者*/?这类通配符,也会完整作为单个字符串赋值给FOO,不需要额外用双引号包裹。

你做的测试完全符合Bash的行为规则:只有在后续使用变量的场景(比如作为命令参数传递)时,才会触发单词拆分,所以这时候必须用双引号包裹变量才能避免非预期的分词。

额外注意的相关规则

  • 加双引号的写法也不算错,很多开发者会统一给所有参数扩展加双引号,避免在非赋值场景漏写引号,属于安全的编码习惯,不会带来额外副作用。
  • 只有「直接出现在赋值符号右侧」和「出现在[[ ]]条件判断块内」的参数扩展会跳过单词拆分,其他所有场景(包括作为命令参数、管道输入、普通字符串拼接)都建议给参数扩展加双引号,比如echo ${BAR:-$VAR}会有分词问题,必须写成echo "${BAR:-$VAR}"。
  • 如果默认值里包含不需要被展开的特殊符号(比如字面量的$、反引号),应该用单引号包裹默认值,而非双引号,比如FOO=${BAR:-'$VAR will stay as literal string'}。
  • 哪怕你要在赋值右侧拼接固定前缀/后缀,也不需要额外加引号,比如FOO=prefix_${BAR:-$VAR}_suffix的写法是安全的,空格不会导致拆分。
  • 如果你需要主动拆分变量内容(比如变量存储的是要传给命令的多个独立参数),才可以不用双引号包裹变量,但这种场景更建议用数组存储参数,避免空格歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:15:03