下面的脚本非常简单,替换&
为&
:
string="Foo & Bar"
echo "${string//&/&}";
但脚本什么也没做。没有错误消息,并且不会替换任何内容:
Foo & Bar
我最终找到了解决方案,您需要在替换部分中转义&符号:
string="Foo & Bar"
echo "${string//&/\&}";
我还没弄清楚的是为什么?为什么脚本没有按预期工作?为什么只需要转义最后一个 & 符号而不是第一个(即${string//\&/\&}
)。
这是否意味着 & 符号在字符串替换中具有特殊含义或用途?
答案1
这里,&
代表匹配的模式:
如果
patsub_replacement
使用 启用 shell 选项shopt
,则任何未加引号的 '&
'实例细绳被替换为匹配部分图案。这是为了重复一个常见的sed
习语。
你的扩展,如果没有转义,最终会&
用它自己替换“”。
这个功能是bash 5.2 中添加。