Я не обработал это, это было в массиве и думало отделенное пробелом в строке. Это решение будет работать с этим, но, учитывая, что это массив, используйте решение 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
?