在shell脚本中替换/替换对抗子字符串变量

hrs*_*hrs 1 regex bash shell

我有三个未转义的对手shell变量.

$mystring
$old
$new
Run Code Online (Sandbox Code Playgroud)

请记住,所有三个字符串都是对抗性的.它们将包含特殊字符.他们将包含一切可能搞乱替换.如果您的替换中存在漏洞,则字符串将利用它.

用$ mystring中的$ new替换$ old最简单的函数是什么?(我无法在堆栈溢出中找到任何解决方案,以便在所有情况下都能正常工作).

Cha*_*ffy 5

这里没什么好看的 - 你需要做的唯一事情是确保你的值在参数扩展中被视为文字,这是为了确保你引用搜索值,如BashFAQ#21的相关部分所述:

result=${mystring/"$old"/$new}
Run Code Online (Sandbox Code Playgroud)

如果没有内部的双引号,$old则会被解释为fnmatch样式的glob表达式; 与他们一起,这是字面意思.