Sim, é uma substituição de padrão no shell expansão de parâmetros como:
${parameter/pattern/replacement}
Mas se o primeiro caractere após o primeiro /
for /
ou #
ou %
, ele terá o significado especial de all
(repetido), start
e end
.
com:
$ str='one_#two_two_three_one'
Um único /
substituirá a primeira instância. A primeira instância de one
:
$ echo "${str/one/x-x}"
x-x_#two_two_three_one
Ou a primeira instância de two
:
$ echo "${str/two/x-x}"
one_#x-x_two_three_one
A instância de one
no final:
$ echo "${str/%one/x-x}"
one_#two_two_three_x-x
Todas as repetições de two
:
$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one
A instância de one
no início:
$ echo "${str/#one/x-x}"
x-x_#two_two_three_one
Uma string que começa com #
(cite o #
):
$ echo "${str/\#two/x-x}"
one_x-x_two_three_one
Mas se você deixar o # (sem aspas) sozinho, a substituição será definida no início da variável:
$ echo "${str/#/====}"
====one_#two_two_three_one
Além disso, se o parâmetro for uma matriz, a substituição será feita em todos os elementos:
$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three