Так, це заміна шаблону в розширенні параметра оболонки як:
${parameter/pattern/replacement}
Але якщо перший символ після першого /
або /
або #
або %
воно має особливе значення all
(повторюється), start
і end
.
з:
$ str='one_#two_two_three_one'
Сингл /
замінить перший екземпляр. Перший примірник one
:
$ echo "${str/one/x-x}"
x-x_#two_two_three_one
Або перший екземпляр two
:
$ echo "${str/two/x-x}"
one_#x-x_two_three_one
Примірник one
в кінці:
$ echo "${str/%one/x-x}"
one_#two_two_three_x-x
Усі повтори two
:
$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one
Екземпляр one
на початку:
$ echo "${str/#one/x-x}"
x-x_#two_two_three_one
Рядок, що починається з #
(цитуйте #
):
$ echo "${str/\#two/x-x}"
one_x-x_two_three_one
Але якщо ви залишите # (без котирування) у спокої, заміна встановлюється на початку змінної:
$ echo "${str/#/====}"
====one_#two_two_three_one
Крім того, якщо параметр є масивом, заміна виконується на всіх елементах:
$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three
#
і%
є частиною шаблону , а//
це інший оператор з/
і використовувати одні і ті ж зразки. Ви можете матиpattern='#x'; echo "${var/$pattern}"
(або${var//$pattern}
), алеpattern=/x; echo "${var/$pattern}"
це не те саме, щоecho "${var//x}"
. Зауважте, що#
і%
їх можна комбінуватиzsh
, але ні,bash
ніksh
.