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

bash字符串替换中&符号为何会替换为原匹配内容?(bash 5.2+)

Bash字符串替换中&的特殊行为解释

在bash的参数扩展字符串替换语法(${parameter/pattern/string})中,替换字符串里的&是特殊字符——它会被匹配到的原内容替换。这个特性并非bash 5.2新增,是该语法的固有行为,只是你之前可能没遇到过。

结合你的测试代码分析:

test="test string MARKER end"; echo "${test/MARKER/new value '&' why & in new value was replaced}"

替换字符串里有两个&:

  • 被单引号包裹的'&':单引号在bash中属于强引用,内部字符不会被解析,所以这个&会原样输出。
  • 未被引用的&:bash会自动将其替换为原匹配的MARKER,这就是输出里出现MARKER的原因。

如果要在替换字符串中输出字面量的&,有两种方式:

  • 用反斜杠转义:\&
  • 将&放在单引号内包裹

比如修改后的代码:

test="test string MARKER end"; echo "${test/MARKER/new value '&' why \& in new value was replaced}"

执行后会得到符合预期的输出:

test string new value & why & in new value was replaced end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:25:02