Расширение параметра в модификаторе замещения - PullRequest
1 голос
/ 09 января 2020

Позвольте x быть параметром, инициализированным следующим образом:

x=("drink/beer" "drink/whine" "drink/boooze")

Предположим, есть также параметры y и z, с y="drink" amd z="buy" соответственно. Для каждого слова в x я хочу заменить часть, которая обрабатывает y, на z. Следовательно, ожидаемый результат -

buy/beer buy/whine buy/boooze

Я думаю, что следующий код сделает это:

print ${x:s/${y}/${z}}

Однако он не работает. Подстроки "drink" не подставляются, и я могу найти причину в документации модификатора :

Замена s / l / r / работает следующим образом [...] При использовании в раскрытии истории, которое происходит до любых других расширений, l и r рассматриваются как буквенные строки

Это означает, что в моей попытке zsh буквально ищет "$ {y}" что, конечно, не найти. Есть ли другой способ достижения цели sh моей цели, без использования явного l oop?

1 Ответ

2 голосов
/ 09 января 2020

Расширение параметра имеет собственный синтаксис замены, отдельный от операторов модификации истории.

% print ${x/$y/$z}
buy/beer buy/whine buy/boooze
...