Evet, kabuk parametre genişletmesinde aşağıdaki gibi bir model değiştirme işlemidir :
${parameter/pattern/replacement}
Fakat ilk sonraki ilk karakter ise /
ya /
ya#
ya da %
özel bir anlamı varsa all
(tekrarlanan) start
ve end
.
ile:
$ str='one_#two_two_three_one'
Bir tek /
örnek ilk örneğin yerini alacaktır. İlk örneği one
:
$ echo "${str/one/x-x}"
x-x_#two_two_three_one
Veya ilk örneği two
:
$ echo "${str/two/x-x}"
one_#x-x_two_three_one
Örneği one
:
$ echo "${str/%one/x-x}"
one_#two_two_three_x-x
Tüm tekrarları two
:
$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one
Örneği one
:
$ echo "${str/#one/x-x}"
x-x_#two_two_three_one
İle başlayan bir dize #
(alıntı yapın #
):
$ echo "${str/\#two/x-x}"
one_x-x_two_three_one
Ancak # (alıntılanmamış) işlevini yalnız bırakırsanız, değiştirme değişkeni başında ayarlanır:
$ echo "${str/#/====}"
====one_#two_two_three_one
Ayrıca, parametre bir dizi ise, değiştirme tüm öğelerde yapılır:
$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three
#
ve%
desenin bir parçasıdır ve aynı desenlerden//
farklı bir operatördür/
ve kullanır. Sahip olabilirsinizpattern='#x'; echo "${var/$pattern}"
(veya${var//$pattern}
), ancakpattern=/x; echo "${var/$pattern}"
aynı değildirecho "${var//x}"
. Unutmayın#
ve%
birleştirilebilirzsh
, ancakbash
ne de olamazksh
.