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), startdan 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 onedi 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 onedi 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 tidakbashjugaksh.