Non ho elaborato che era in un array e pensavo che gli spazi fossero separati in una stringa. Questa soluzione funzionerà con quella, ma dato che è un array, vai con manatwork's solution ( @{my_array[@]/#/-}).
Questo non è poi così male sede con una subshell. La facilità con cui regex è dipende da cosa puoi garantire sulle opzioni. Se le opzioni sono tutte una "parola" ( a-zA-Z0-9solo), \<sarà sufficiente un semplice limite di parola iniziale ( ):
command $(echo $my_array | sed 's/\</-/g') "$1"
Se le tue opzioni hanno altri personaggi (molto probabilmente -), avrai bisogno di qualcosa di un po 'più complesso:
command $(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g') "$1"
^corrisponde all'inizio della riga, [ \t]corrisponde a uno spazio o una scheda, \|corrisponde a entrambi i lati ( ^o [ \t]), i \( \)gruppi (per \|) e memorizza il risultato, \<corrisponde all'inizio di una parola. \1inizia la sostituzione mantenendo la prima partita dal parens ( \(\)) e -ovviamente aggiunge il trattino di cui abbiamo bisogno.
Questi funzionano con gnu sed, se non funzionano con i tuoi, fammi sapere.
E se utilizzerai la stessa cosa più volte, potresti volerlo calcolare una volta e archiviarlo:
opts="$(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g')"
...
command $opts "$1"
command $opts "$2"
-all'inizio di ogni parola inmy_array?