pergantian string: semua kejadian

13

Sebuah pertanyaan sederhana, tetapi saya tidak dapat menemukan jawabannya. dokumentasi zsh membuatku kewalahan :-(

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

$ z thethethe
THEthethe

...

Bagaimana saya bisa mendapatkan semua 'yang' diganti dengan 'THE', bukan hanya kejadian pertama? Dengan zsh itu adalah hal termudah yang tampaknya paling sulit untuk menemukan contoh.

Ray Andrews
sumber

Jawaban:

23

Ini adalah pengubah perluasan riwayat , jadi tambahkan gpengubah segera sebelum s.

echo ${1:gs/the/THE}

Atau, gunakan sintaks ekspansi parameter di mana garis miring ganda berarti substitusi global. Dalam hal ini, bagian setelahnya s//adalah pola wildcard, sedangkan penggantian ekspansi sejarah mengambil string literal.

echo ${1//the/THE}
Gilles 'SANGAT berhenti menjadi jahat'
sumber
6

Ini harus melakukan pekerjaan:

VARIABLE=thethethe
echo ${VARIABLE//the/THE}
THETHETHE
kekacauan
sumber
3

Jadi, itu harus sederhana:

echo ${1//the/THE}

... tebasan ganda berhasil, dan Anda tidak bisa main-main dengan ": s"

BTW, saya yakin ingin mengucapkan terima kasih kepada situs 'StackExchange' untuk yang sudah ada. Dari sekian banyak tempat yang mungkin ditanyakan, ini adalah yang terbaik - yang hampir tidak selalu mendapat jawaban, tetapi jawaban itu selalu berkualitas tinggi.

Ray Andrews
sumber
1

// berfungsi sempurna jika Anda hanya mencoba mengganti kata tertentu ke semua huruf besar sambil membiarkan sisanya tidak tersentuh. Jika Anda mencoba mengubah semuanya menjadi huruf besar, Anda dapat menggunakan ": u" pada variabel

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

Anda dapat memverifikasi pengubah mana yang Anda miliki di manual ekspansi dan substitusi zsh

man zshexpn
bradynpoulsen
sumber