Je ne pensais pas que c'était dans un tableau et je pensais séparer les espaces par une chaîne. Cette solution fonctionnera avec cela, mais étant donné qu'il s'agit d'un tableau, utilisez la solution manatwork ( @{my_array[@]/#/-}
).
Ce n'est pas si mal avec sed
et un sous-shell. La simplicité de l'expression rationnelle dépend de ce que vous pouvez garantir concernant les options. Si toutes les options sont un "mot" ( a-zA-Z0-9
seulement), un simple début de mot frontière ( \<
) suffira:
command $(echo $my_array | sed 's/\</-/g') "$1"
Si vos options ont d'autres caractères (probablement -
), vous aurez besoin de quelque chose d'un peu plus complexe:
command $(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g') "$1"
^
correspond au début de la ligne, [ \t]
correspond à un espace ou une tabulation, \|
correspond à l'un ^
ou l' autre côté ( ou [ \t]
), \(
\)
groupes (pour le \|
) et stocke le résultat, \<
correspond au début d'un mot. \1
commence le remplacement en gardant le premier match des parens ( \(\)
), et -
ajoute bien sûr le tiret dont nous avons besoin.
Ceux-ci fonctionnent avec gnu sed, s'ils ne fonctionnent pas avec le vôtre, faites le moi savoir.
Et si vous utilisez la même chose plusieurs fois, vous pouvez simplement le calculer une fois et le stocker:
opts="$(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g')"
...
command $opts "$1"
command $opts "$2"
-
au début de chaque motmy_array
?