Bir dizide olduğunu işlemedim ve bir dizede boşlukla ayrılmış olduğunu düşünüyordum. Bu çözüm bununla işe yarayacak, ancak bir dizi göz önüne alındığında, manatwork'ün çözümüyle ( @{my_array[@]/#/-}) geçin .
Bu çok kötü değil sedve bir denizaltıyla. Regex'in ne kadar kolay olduğu, seçenekler hakkında neleri garanti edeceğinize bağlıdır. Seçeneklerin tümü bir "sözcük" ise ( a-zA-Z0-9sadece), o zaman basit bir başlangıç sözcük sınır ( \<) yeterli olacaktır:
command $(echo $my_array | sed 's/\</-/g') "$1"
Seçeneklerinizde başka karakterler varsa (büyük olasılıkla -), biraz daha karmaşık bir şeye ihtiyacınız olacak:
command $(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g') "$1"
^satırın başlangıcıyla [ \t]eşleşir, bir boşlukla veya sekmeyle \|eşleşir, her iki tarafla ( ^veya [ \t]) eşleşir , \( \)gruplar (için \|) ve sonucu depolar, \<bir kelimenin başlangıcıyla eşleşir. \1ilk eşleşmeyi parens ( \(\)) ile değiştirerek işe başlar ve -elbette ihtiyacımız olan çizgiyi ekler.
Bunlar gnu sed ile çalışıyor, eğer seninle çalışmazsa, haberim olsun.
Aynı şeyi birden çok kez kullanacaksanız, bir kez hesaplamak ve depolamak isteyebilirsiniz:
opts="$(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g')"
...
command $opts "$1"
command $opts "$2"
-her kelimenin başlangıcına eklemek ister misinmy_array?