podstawienia ciągów: wszystkie wystąpienia

13

Proste pytanie, ale nie mogę znaleźć odpowiedzi. dokumentacja Zsh mnie przytłacza :-(

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

$ z thethethe
THEthethe

...

Jak sprawić, by wszystkie „te” zostały zastąpione przez „THE”, a nie tylko pierwsze wystąpienie? Zsh to najłatwiejsze rzeczy, na które wydaje się najtrudniej znaleźć przykłady.

Ray Andrews
źródło

Odpowiedzi:

23

Jest to modyfikator rozszerzenia historii , więc dodaj go gwcześniej s.

echo ${1:gs/the/THE}

Możesz też użyć składni interpretacji parametrów, w której podwójny ukośnik oznacza podstawienie globalne. W tym przypadku część następna s//jest wzorem wieloznacznym, podczas gdy podstawianie interpretacji historii wymaga literału.

echo ${1//the/THE}
Gilles „SO- przestań być zły”
źródło
6

To powinno wykonać zadanie:

VARIABLE=thethethe
echo ${VARIABLE//the/THE}
THETHETHE
chaos
źródło
3

Tam musiało być proste:

echo ${1//the/THE}

... robi to podwójny ukośnik i nie możesz wygłupiać się z ": s"

BTW, z pewnością chciałbym podziękować stronom „StackExchange” za istnienie. Ze wszystkich zillionów miejsc, które można zadać, są one zdecydowanie najlepsze - nie tylko prawie zawsze otrzymuje się odpowiedzi, ale zawsze są one najwyższej jakości.

Ray Andrews
źródło
1

// działa idealnie, jeśli próbujesz tylko zamienić określone słowo na wszystkie wielkie litery, pozostawiając resztę nietkniętą. Jeśli próbujesz przekonwertować wszystko na wielkie litery, możesz użyć zmiennej „: u”

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

Możesz sprawdzić, jakie modyfikatory masz dostępne w instrukcji rozszerzenia i podstawiania zsh

man zshexpn
bradynpoulsen
źródło