Não processei que estava em uma matriz e estava pensando em espaço em branco separado em uma string. Esta solução funcionará com isso, mas, como é uma matriz, siga a solução do manatwork ( @{my_array[@]/#/-}
).
Isso não é tão ruim com sed
um subshell. A facilidade de regex depende do que você pode garantir sobre as opções. Se as opções forem todas uma "palavra" ( a-zA-Z0-9
apenas), um limite simples da palavra inicial ( \<
) será suficiente:
command $(echo $my_array | sed 's/\</-/g') "$1"
Se suas opções tiverem outros caracteres (provavelmente -
), você precisará de algo um pouco mais complexo:
command $(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g') "$1"
^
corresponde ao início da linha, [ \t]
corresponde a um espaço ou tabulação, \|
corresponde a um dos lados ( ^
ou [ \t]
), \(
\)
agrupa (para \|
) e armazena o resultado, \<
corresponde ao início de uma palavra. \1
inicia a substituição mantendo a primeira partida entre parens ( \(\)
) e, -
claro, adiciona o traço que precisamos.
Estes funcionam com o gnu sed, se não funcionarem com o seu, me avise.
E se você usar a mesma coisa várias vezes, é possível calculá-lo apenas uma vez e armazená-lo:
opts="$(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g')"
...
command $opts "$1"
command $opts "$2"
-
ao início de cada palavramy_array
?