Ya, itu adalah penggantian pola dalam ekspansi parameter shell sebagai:
${parameter/pattern/replacement}
Tetapi jika karakter pertama setelah yang pertama /
adalah salah satu /
atau #
atau %
itu memiliki arti khusus all
(diulang), start
dan end
.
dengan:
$ str='one_#two_two_three_one'
Satu /
akan menggantikan instance pertama. Contoh pertama dari one
:
$ echo "${str/one/x-x}"
x-x_#two_two_three_one
Atau contoh pertama two
:
$ echo "${str/two/x-x}"
one_#x-x_two_three_one
Contoh one
di akhir:
$ echo "${str/%one/x-x}"
one_#two_two_three_x-x
Semua pengulangan two
:
$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one
Contoh one
di awal:
$ echo "${str/#one/x-x}"
x-x_#two_two_three_one
Sebuah string yang dimulai dengan #
(kutip #
):
$ echo "${str/\#two/x-x}"
one_x-x_two_three_one
Tetapi jika Anda membiarkan # (tanpa tanda kutip) sendirian, penggantiannya diatur di awal variabel:
$ echo "${str/#/====}"
====one_#two_two_three_one
Selanjutnya, jika parameternya adalah array, penggantian dilakukan pada semua elemen:
$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three
#
dan%
merupakan bagian dari pola sementara//
operator berbeda dari/
dan menggunakan pola yang sama. Anda dapat memilikipattern='#x'; echo "${var/$pattern}"
(atau${var//$pattern}
), tetapipattern=/x; echo "${var/$pattern}"
tidak sama denganecho "${var//x}"
. Perhatikan itu#
dan%
dapat digabungkanzsh
, tetapi tidakbash
jugaksh
.