подстановки строк: все вхождения

13

Простой вопрос, но я не могу найти ответ. документация zsh меня переполняет :-(

function z ()
{
  echo ${1:s/the/THE}
}

$ z thethethe
THEthethe

...

Как я могу получить все «за» , чтобы быть заменен на «The», а не только первое вхождение? С zsh это самые простые вещи, которые, кажется, труднее всего найти примеры.

Рэй Эндрюс
источник

Ответы:

23

Это модификатор расширения истории , поэтому добавьте его gнепосредственно перед этим s.

echo ${1:gs/the/THE}

В качестве альтернативы используйте синтаксис раскрытия параметров, где двойная косая черта означает глобальную замену. В этом случае часть после s//является шаблоном подстановки, тогда как подстановка расширения истории занимает буквальную строку.

echo ${1//the/THE}
Жиль "ТАК - перестань быть злым"
источник
6

Это должно сделать работу:

VARIABLE=thethethe
echo ${VARIABLE//the/THE}
THETHETHE
хаос
источник
3

Там должно быть все просто:

echo ${1//the/THE}

... двойная косая черта делает это, и вы не можете дурачиться с ": s"

Кстати, я бы хотел поблагодарить сайты «StackExchange» за существующие. Из всех миллионов мест, где можно задать вопрос, это, безусловно, самое лучшее - ответы не только почти всегда получаются, но эти ответы неизменно имеют высочайшее качество.

Рэй Эндрюс
источник
1

// отлично работает, если вы пытаетесь заменить определенное слово на все заглавные, оставляя остальное без изменений. Если вы пытаетесь преобразовать все в верхний регистр, вы можете использовать «: u» в переменной

SOME_ENV_VALUE='thethethe'
echo $SOME_ENV_VALUE:u // outputs: THETHETHE

Вы можете проверить, какие модификаторы у вас есть в руководстве по расширению и замене zsh.

man zshexpn
bradynpoulsen
источник