Я не обработал это, это было в массиве и думало отделенное пробелом в строке. Это решение будет работать с этим, но, учитывая, что это массив, используйте решение manatwork ( @{my_array[@]/#/-}).
Это не так уж и плохо с sedнедоработкой. Насколько легко это регулярное выражение, зависит от того, что вы можете гарантировать о вариантах. Если все варианты - это одно «слово» ( a-zA-Z0-9только), тогда достаточно простого начального слова border ( \<):
command $(echo $my_array | sed 's/\</-/g') "$1"
Если в ваших опциях есть другие символы (скорее всего -), вам понадобится нечто более сложное:
command $(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g') "$1"
^соответствует началу строки, [ \t]соответствует пробелу или табуляции, \|соответствует любой стороне ( ^или [ \t]), \( \)группам (для \|) и сохраняет результат, \<соответствует началу слова. \1начинает замену, сохраняя первое совпадение от parens ( \(\)), и, -конечно, добавляет черту, которая нам нужна.
Они работают с GNU SED, если они не работают с вашим, дайте мне знать.
И если вы будете использовать одну и ту же вещь несколько раз, вы можете просто рассчитать ее один раз и сохранить:
opts="$(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g')"
...
command $opts "$1"
command $opts "$2"
-в начало каждого слова вmy_array?