在使用位置变量时,是否可以解析SC2001(“看看你是否可以使用$ {variable // search / replace}代替”)?

问题描述 投票:3回答:1

我正在寻找一个衬垫,用变量替换替换变量位置的变量字符串中的任何字符。我提出了这个有效的解决方案:

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 parameter-expansion shellcheck
1个回答
4
投票

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}是该点之后的文本。

© www.soinside.com 2019 - 2024. All rights reserved.