Saya tidak memproses bahwa itu dalam sebuah array dan berpikir dipisahkan oleh spasi. Solusi ini akan bekerja dengan itu, tetapi mengingat bahwa itu adalah array, ikuti solusi manatwork ( @{my_array[@]/#/-}
).
Ini tidak terlalu buruk dengan sed
dan subkulit. Seberapa mudah regex tergantung pada apa yang dapat Anda jamin tentang opsi. Jika semua opsi adalah satu "kata" ( a-zA-Z0-9
hanya), maka batas kata awal yang sederhana ( \<
) akan cukup:
command $(echo $my_array | sed 's/\</-/g') "$1"
Jika opsi Anda memiliki karakter lain (kemungkinan besar -
), Anda akan memerlukan sesuatu yang sedikit lebih rumit:
command $(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g') "$1"
^
cocok dengan awal baris, [ \t]
cocok dengan spasi atau tab, \|
cocok dengan kedua sisi ( ^
atau [ \t]
), \(
\)
kelompok (untuk \|
) dan menyimpan hasilnya, \<
cocok dengan awal kata. \1
memulai penggantian dengan menjaga pertandingan pertama dari parens ( \(\)
), dan -
tentu saja menambahkan tanda hubung yang kita butuhkan.
Ini bekerja dengan gnu sed, jika mereka tidak bekerja dengan Anda, beri tahu saya.
Dan jika Anda akan menggunakan hal yang sama beberapa kali, Anda mungkin ingin menghitungnya sekali saja dan menyimpannya:
opts="$(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g')"
...
command $opts "$1"
command $opts "$2"
-
awal setiap katamy_array
?