প্রথমত, আপনি ব্যবহার করতে প্রয়োজন হবে না $(echo $FRUITS)
যে for
বিবৃতি। জাস্ট ব্যবহার $FRUITS
করা যথেষ্ট। তারপরে আপনি লুপের অভ্যন্তরে যে কোনও একটি লাইন ব্যবহার করতে পারেন eval
।
eval
কেবল ব্যাশ বলে একটি দ্বিতীয় করতে মূল্যায়ন (অর্থাত আরো এক তার স্বাভাবিক মূল্যায়ন বেশি) নিম্নোক্ত বিবৃতি করুন। \$
প্রথম মূল্যায়ন প্রাণে বেঁচে যান $
এবং পরবর্তী মূল্যায়ন তারপর এই একইরূপে $
একটি পরিবর্তনশীল নাম শুরুর, যেমন যেটি "ইয়েলো", ইত্যাদি সমাধান করা
এইভাবে আপনার একটি পৃথক পদক্ষেপের প্রয়োজন হবে না যা একটি অন্তর্বর্তীকালীন স্ট্রিং তৈরি করে (যা আমি বিশ্বাস করি যে আপনার প্রশ্নের মূল উদ্দেশ্য)।
for fruit in $FRUITS ;do
eval echo $fruit is \$${fruit}_COLOUR
done
বিকল্প পদ্ধতির জন্য, যেমনটি প্যাট্রিক একটি মন্তব্যে উল্লিখিত হয়েছে (উপরে), আপনি পরিবর্তে একটি এসোসিয়েটিভ অ্যারে ব্যবহার করতে পারেন , যাতে কোনও উপাদানের সূচককে পূর্ণসংখ্যার প্রয়োজন হয় না। আপনি কোনও স্ট্রিং ব্যবহার করতে পারেন, যেমন এক ধরণের ফলের নাম। বাশের সহযোগী অ্যারে ব্যবহার করে এখানে একটি উদাহরণ দেওয়া হল:
# This declares an associative array (It unsets it if it already exists)
declare -A colour
colour['BANANA']="Yellow"
colour["APPLE"]="Green or Red"
colour[MARTIAN ORANGE]="Blue"
for fruit in BANANA APPLE "MARTIAN ORANGE" ;do
echo "$fruit" is "${colour[$fruit]}"
done
!
সিনট্যাক্স পরিবর্তনশীল প্রতিকল্পন উপর একটি পতাকা মূলত বলছেন যে "বিকল্প দুইবার" হয়। এটি প্রয়োজনীয়তার পরিবর্তন করে না যে প্রান্তের ভিতরে যা আছে${…}
অবশ্যই একটি পরিবর্তনশীল নাম হতে পারে। সুতরাং না, আপনি নাম সহ এমন একটি ভেরিয়েবল ব্যবহার এড়াতে পারবেন না, যদি না আপনি ভিন্ন পদ্ধতি (eval
) ব্যবহার করেন।