Да, это замена шаблона в расширении параметров оболочки :
${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.