4

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

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,但我不清楚使用位置变量时的正确格式。官方文档似乎根本没有讨论字符串中的定位。

这可能吗?

4

1 回答 1

5

Bash 没有替代所有 sed 工具的通用案例(警告 SC2001 的 shellcheck wiki 页面也承认了这一点),但在某些特定情况下——包括所提出的案例——可以组合参数扩展以达到预期的效果:

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

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

于 2019-02-13T22:58:43.600 回答