No procesé que estaba en una matriz y estaba pensando en espacios en blanco separados en una cadena. Esta solución funcionará con eso, pero dado que es una matriz, vaya con la solución de manatwork ( @{my_array[@]/#/-}
).
Esto no es tan malo con sed
una subshell. Lo fácil que es la expresión regular depende de lo que pueda garantizar sobre las opciones. Si las opciones son todas una "palabra" ( a-zA-Z0-9
solo), \<
bastará con un simple límite de palabra inicial ( ):
command $(echo $my_array | sed 's/\</-/g') "$1"
Si sus opciones tienen otros caracteres (muy probablemente -
), necesitará algo un poco más complejo:
command $(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g') "$1"
^
coincide con el comienzo de la línea, [ \t]
coincide con un espacio o tabulación, \|
coincide con cualquier lado ( ^
o [ \t]
), \(
\)
agrupa (para \|
) y almacena el resultado, \<
coincide con el inicio de una palabra. \1
comienza el reemplazo manteniendo la primera coincidencia de los parens ( \(\)
) y, -
por supuesto, agrega el guión que necesitamos.
Estos funcionan con gnu sed, si no funcionan con los suyos, hágamelo saber.
Y si va a usar lo mismo varias veces, es posible que desee calcularlo una vez y almacenarlo:
opts="$(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g')"
...
command $opts "$1"
command $opts "$2"
-
al comienzo de cada palabramy_array
?