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 sed
ve 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-9
sadece), 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. \1
ilk 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
?