আমি প্রক্রিয়া করিনি যে এটি একটি অ্যারেতে ছিল এবং একটি স্ট্রিংয়ের মধ্যে সাদা স্থানকে পৃথক করে নিয়ে ভাবছিলাম। এই সমাধানটি এটির সাথে কাজ করবে, তবে এটি অ্যারে হিসাবে দেওয়া হবে, ম্যান্যাটওয়ার্কের সমাধান ( @{my_array[@]/#/-}
) সহ যান।
এটি sed
এবং একটি সাব-শেলের সাথে খুব খারাপ নয় । রেজেক্স কতটা সহজ তা নির্ভর করে আপনি বিকল্পগুলি সম্পর্কে কী গ্যারান্টি দিতে পারেন তার উপর depends বিকল্পগুলি যদি সমস্ত একটি "শব্দ" ( a-zA-Z0-9
কেবল) হয় তবে একটি সাধারণ শুরুর শব্দ সীমানা ( \<
) যথেষ্ট হবে:
command $(echo $my_array | sed 's/\</-/g') "$1"
যদি আপনার বিকল্পগুলির অন্যান্য অক্ষর থাকে (সম্ভবত -
) তবে আপনার কিছুটা জটিল জটিল প্রয়োজন:
command $(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g') "$1"
^
লাইনের প্রারম্ভের সাথে [ \t]
মেলে, একটি স্থান বা ট্যাবের সাথে \|
মেলে, উভয় পক্ষের ( ^
বা [ \t]
), \(
\)
গ্রুপগুলির (এর জন্য \|
) \<
মেলে এবং ফলাফলটি সংরক্ষণ করে, একটি শব্দের শুরুতে মেলে matches \1
প্রথম ম্যাচটি পেরেন ( \(\)
) থেকে রেখে প্রতিস্থাপন শুরু করে এবং -
অবশ্যই আমাদের প্রয়োজনীয় ড্যাশ যুক্ত করে।
এইগুলি gnu সেডের সাথে কাজ করে, যদি তারা আপনার সাথে কাজ না করে তবে আমাকে জানান।
এবং আপনি যদি একই জিনিসটি একাধিকবার ব্যবহার করেন তবে আপনি একবার এটি গণনা করতে এবং সঞ্চয় করতে পারেন:
opts="$(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g')"
...
command $opts "$1"
command $opts "$2"
-
প্রতিটি শব্দের শুরুতে যুক্ত করতে চানmy_array
?