Можно ли разрешить SC2001 («Посмотрите, можете ли вы вместо этого использовать $ {variable // search / replace}») при использовании переменной позиции? - PullRequest
0 голосов
/ 14 февраля 2019

Я ищу одну строку, чтобы заменить любой символ в переменной переменной в переменной позиции заменителем переменной.Я пришел с этим рабочим решением:

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, но я неясен относительно правильного форматирования при использовании переменной положения.Официальная документация , похоже, вообще не обсуждает позиционирование внутри строк.

Возможно ли это?

1 Ответ

0 голосов
/ 14 февраля 2019

Bash не имеет замены общего случая для всех средств sed (shell-check вики-страница для предупреждения SC2001 признает столько же), но в некоторых конкретных сценариях - включая заданный случай - параметррасширения могут быть объединены для достижения желаемого эффекта:

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

Здесь мы разбиваем значение на подстроки: ${string:0:$(( position - 1 ))} - это текст, предшествующий заменяемому содержимому, а ${string:position} - этотекст после этой точки.

...