Sí, es un reemplazo de patrón en la expansión de parámetros de shell como:
${parameter/pattern/replacement}
Pero si el primer carácter después de la primera /es o /o #o %tiene el significado especial de all(repetido), starty end.
con:
$ str='one_#two_two_three_one'
Un solo /reemplazará a la primera instancia. La primera instancia de one:
$ echo "${str/one/x-x}"
x-x_#two_two_three_one
O la primera instancia de two:
$ echo "${str/two/x-x}"
one_#x-x_two_three_one
La instancia de oneal final:
$ echo "${str/%one/x-x}"
one_#two_two_three_x-x
Todas las repeticiones de two:
$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one
La instancia de oneal principio:
$ echo "${str/#one/x-x}"
x-x_#two_two_three_one
Una cadena que comienza con #(cita el #):
$ echo "${str/\#two/x-x}"
one_x-x_two_three_one
Pero si deja solo el # (sin comillas), el reemplazo se establece al comienzo de la variable:
$ echo "${str/#/====}"
====one_#two_two_three_one
Además, si el parámetro es una matriz, el reemplazo se realiza en todos los elementos:
$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three
#y%son parte del patrón, mientras que//es un operador diferente de/y utilizar los mismos patrones. Puede tenerpattern='#x'; echo "${var/$pattern}"(o${var//$pattern}), peropattern=/x; echo "${var/$pattern}"no es lo mismo queecho "${var//x}". Tenga en cuenta que#y%se puede combinar enzsh, pero nobashniksh.