Так, це заміна шаблону в розширенні параметра оболонки як:
${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.