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 sedum 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-9apenas), 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. \1inicia 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?