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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.