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), start
y 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 one
al 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 one
al 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 nobash
niksh
.