我正在寻找一个衬垫,用变量替换替换变量位置的变量字符串中的任何字符。我提出了这个有效的解决方案:
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}
是该点之后的文本。