এটি অনেক পরীক্ষা এবং ত্রুটি নিয়েছে কিন্তু শেষ পর্যন্ত কাজ করেছে।
আমি ইউনেসের কাছ থেকে কিছুটা অনুপ্রেরণা নিয়েছি। তবে অন্য সমস্ত উত্তর আমার পুরানো বাশকে সহায়তা করে নি (suse11sp1 [৩.২.৫১ (১) -আর দয়া করে])
'ফর' লুপ অপ্রত্যক্ষ অ্যারে প্রসারিত করতে অস্বীকৃতি জানিয়েছে, পরিবর্তে আপনাকে এটির পূর্ব-প্রসারণ করা দরকার, এটি আপনার নতুন ভেরিয়েবল নামের সাথে অন্য অ্যারে তৈরি করতে ব্যবহার করুন। নীচে আমার উদাহরণটি একটি ডাবল লুপ দেখায়, এটি হ'ল আমার ব্যবহার।
THEBIGLOOP=(New_FOO New_BAR)
FOOthings=(1 2 3)
BARthings=(a b c)
for j in ${THEBIGLOOP[*]}
do
TheNewVariable=$(eval echo \${${j#New_}things[@]})
for i in $TheNewVariable
do
echo $j $i" hello"
echo
done
done
আমি প্রথম অ্যারে এন্ট্রি থেকে "নতুন_" মুছতে, তারপরে "জিনিসগুলি" দিয়ে কনটেন্টেট করে, "ফুথিংস" পেতে # ব্যবহার করছি। প্রতিধ্বনি এবং ইওল সহ \ $ {}, তারপরে ত্রুটি নিক্ষেপ না করে তাদের কাজটি করুন, যা একটি নতুন $ () এ মোড়ানো থাকে এবং নতুন ভেরিয়েবলের নাম নির্ধারিত হয়।
$ Test.sh
New_FOO 1 hello
New_FOO 2 hello
New_FOO 3 hello
New_BAR a hello
New_BAR b hello
New_BAR c hello
আপডেট ##### 2018/06/07
আমি সম্প্রতি এই বিষয়ে আরও একটি স্পিন আবিষ্কার করেছি। তৈরি ভেরিয়েবল আসলে একটি অ্যারে নয়, একটি স্পেস ডিলিমিট স্ট্রিং। উপরের কাজটি ঠিক ছিল কারণ "কীভাবে" কাজ করে, এটি অ্যারেটি পড়ে না, এটি প্রসারিত হয় এবং তারপরে লুপ করা হয়, নীচের সূচনাটি দেখুন:
for VARIABLE in 1 2 3 4 5 .. N
do
command1
command2
commandN
done
তবে, আমার তখন এটি অ্যারে হিসাবে ব্যবহার করা দরকার। এর জন্য আমার আরও একটি পদক্ষেপ করা দরকার। আমি ডেনিস উইলিয়ামসনের কোড ভারব্যাটিম নিয়েছি । আমি এটি পরীক্ষা করেছি এবং এটি ভাল কাজ করে।
IFS=', ' read -r -a TheNewVariable <<< ${TheNewVariable[@]}
"আইএফএস = ','" হ'ল একটি পরিবর্তনশীল যা আপনার ডিলিমিনেটর ধারণ করে। "-a" কাট দিয়ে "পড়ুন" এবং অ্যারে ভেরিয়েবলের মধ্যে স্টিং ফিড করে। মনে রাখবেন, এই উদ্ধৃতি চিহ্ন তার কোন সম্মান আছে, কিন্তু সেখানে কয়েকটি বিকল্প রইল পঠিত এই পরিচালনা করতে, যেমন আমি -r পতাকা যা আমি না হলেই ভাল হত সরিয়েছি। সুতরাং আমি এখন ভেরিয়েবল তৈরিতে এই সংযোজনটি সংযুক্ত করেছি, যা ডেটাটিকে যেমন করা উচিত তেমন আচরণ করা এবং সম্বোধন করার অনুমতি দেয়।
THEBIGLOOP=(New_FOO New_BAR)
FOOthings=(1 2 3)
BARthings=(a b c)
for j in ${THEBIGLOOP[*]}
do
IFS=', ' read -a TheNewVariable <<< $(eval echo \${${j#New_}things[@]})
for i in ${TheNewVariable[@]} #Now have to wrap with {} and expand with @
do
echo $j $i" hello"
echo ${TheNewVariable[$i]} #This would not work in the original code
echo
done
done