A resposta aceita para Transformar uma matriz em argumentos de um comando? usa o seguinte comando Bash:
command "${my_array[@]/#/-}" "$1"
Estou tentando descobrir o que a /#/-
peça faz, exatamente. Infelizmente, não sei como chamá-lo, então estou tendo problemas para encontrar qualquer documentação. Eu procurei na seção da página de manual do Bash em arrays e alguns sites, mas não consigo encontrar nada.
Esta é uma instância de substituição de padrão no parâmetro shell expansion :
${parameter/pattern/replacement}
expands${parameter}
, substituindo a primeira instância depattern
porreplacement
. No contexto de um padrão desse tipo,#
é especial: ancora o padrão no início do parâmetro. O resultado final de tudo isso é expandir todos os valores nomy_array
array, precedendo-
cada um (substituindo o padrão vazio no início de cada parâmetro).Sim, é uma substituição de padrão na expansão de parâmetros do shell como:
Mas se o primeiro caractere após o primeiro
/
for/
ou#
ou%
tiver o significado especial deall
(repetido),start
eend
.com:
Um single
/
substituirá a primeira instância. A primeira instância deone
:Ou a primeira instância de
two
:A instância de
one
no final:Todas as repetições de
two
:A instância de
one
no início:Uma string que começa com
#
(citar o#
):Mas se você deixar o # (sem aspas) sozinho, a substituição é definida no início da variável:
Além disso, se o parâmetro for um array, a substituição é feita em todos os elementos: