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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在使用位置变量时,是否可以解析SC2001(“看看你是否可以使用$ {variable // search / replace}代替”)?相关的知识,希望对你有一定的参考价值。

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

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

以上是关于在使用位置变量时,是否可以解析SC2001(“看看你是否可以使用$ {variable // search / replace}代替”)?的主要内容,如果未能解决你的问题,请参考以下文章

lnk2001的问题

解析文档时是不是可以检测 HTML 元素的位置(页脚、侧边栏)?

GameEngine.obj : error LNK2001: 无法解析的外部符号 private: static class GameEngine * GameEngine::

mfc error LNK2001:无法解析的外部符号。

Qt 无法解析外部文件2001,2019之类的

VC++ LNK2001:仅在 64 位编译时无法解析外部符号