使用位置变量时是否可以解析 SC2001 ("See if you can use ${variable//search/replace} instead")?

Is it possible to resolve SC2001 ("See if you can use ${variable//search/replace} instead") while using a position variable?

我正在寻找一个单行代码来用变量替换替换可变字符串中可变位置的任何字符。我想出了这个可行的解决方案:

echo "$string" | sed "s/./${replacement}/${position}"

用法示例:

string=aaaaa
replacement=b
position=3
echo "$string" | sed "s/./${replacement}/${position}"
aabaa

不幸的是,当我 运行 使用包含我当前解决方案的脚本进行 shellcheck 时,它告诉我:

SC2001: See if you can use ${variable//search/replace} instead.

我想像它建议的那样使用参数扩展而不是管道到 sed,但我不清楚使用位置变量时的正确格式。 official documentation 似乎根本不讨论字符串内的定位。

这可能吗?

Bash 没有所有 sed 工具的一般情况替换(shellcheck wiki page for warning SC2001 承认了这一点),但在某些特定情况下——包括所提出的情况——参数可以组合扩展以达到所需的效果:

string=aaaaa
replacement=b
position=3
echo "${string:0:$(( position - 1 ))}${replacement}${string:position}"

在这里,我们将值拆分为子字符串:${string:0:$(( position - 1 ))} 是要替换内容之前的文本,${string:position} 是该点之后的文本。