একটি অ্যারের উপরে একটি লুপে, অ্যারেতে একটি উপাদান যুক্ত করুন


9

আমার ল্যাপ ইন ল্যাশ নিয়ে সমস্যা আছে। উদাহরণস্বরূপ: আমার একটি অ্যারে আছে ("etc" "bin" "var")। এবং আমি এই অ্যারে পুনরুক্তি। তবে লুপটিতে আমি অ্যারেতে কিছু মূল্য যুক্ত করতে চাই। যেমন

array=("etc" "bin" "var")
for i in "${array[@]}"
do
echo $i
done

এটি প্রদর্শিত হয় etc bin var(অবশ্যই পৃথক লাইনে)। এবং যদি আমি এর পরে সংযোজন doকরি:

array=("etc" "bin" "var")
for i in "${array[@]}"
do
array+=("sbin")
echo $i
done

আমি চাই: etc bin var sbin(অবশ্যই আলাদা লাইনে)

এটি কাজ করছে না। আমি এটা কিভাবে করবো?


1
আপনি যে জিনিসটির উপরে পুনরাবৃত্তি করছেন তা পরিবর্তন করা সর্বদা একটি ঝুঁকিপূর্ণ প্রস্তাব। পিছনে পদক্ষেপ নেওয়া এবং বিবেচনা করার মতো আরও একটি উপায় রয়েছে কিনা তা বিবেচনা করার জন্য প্রায়শই ভাল সময়
এরিক রেনোফ

উত্তর:


6

এটি "এসবিন" এটির মতো 3 বার সংযোজন করবে , তবে এটি একই লুপটিতে নতুন যুক্ত হওয়া "এসবিন" এর উপর পুনরাবৃত্তি করবে না।

২ য় উদাহরণের পরে:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin

হ্যাঁ, ঠিক আছে, তবে আমার একই
লুপটিতে

forতখন দুটি লুপ ব্যবহার করুন । প্রথমে আপনার সংযোজনগুলি হালকা করুন, তারপরে ফলাফলটি লুপ করুন।
PSkocik

1
আপনি দেখতে পাচ্ছেন না কেন আপনি লুফে এসবিন যুক্ত করতে চান। এটি একবারে যুক্ত করা আরও বেশি array+=(sbin); for i in ...
অর্থবোধ করে


5
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

এটি আপনার তালিকার উপরে পুনরাবৃত্তি করবে, sbinশর্তাধীন অবস্থায় তালিকার শেষের দিকে ঝাঁপিয়ে পড়বে sbinএবং পুনরাবৃত্তিযোগ্য সামগ্রীতে অন্তর্ভুক্ত হবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.