বাশ এসোসিয়েটিভ অ্যারে ভেরিয়েবলের সমস্ত 'ইনডেক্স আইডি' (কী) তালিকাভুক্ত করার কোনও উপায় আছে কি?


26

আমার এই অ্যারে আছে:

declare -A astr

আমি এতে উপাদান যুক্ত করছি:

astr[elemA]=123
astr[elemB]=199

তবে পরে আমাকে সূচি আইডিগুলি (এলিএমএ এবং এলেমবি) কী এবং সেগুলি তালিকাভুক্ত করতে হবে।

echo "${astr[@]}" #this only get me the values...

উত্তর:


35

আপনি এই জাতীয়ভাবে পরামর্শমূলক অ্যারের জন্য "কীগুলির" তালিকা পেতে পারেন:

$ echo "${!astr[@]}"
elemB elemA

আপনি "কী" এর মাধ্যমে পুনরাবৃত্তি করতে পারেন:

for i in "${!astr[@]}"
do   
  echo "key  : $i"
  echo "value: ${astr[$i]}"
done

উদাহরণ

$ for i in "${!astr[@]}"; do echo "key  : $i"; echo "value: ${astr[$i]}"; done
key  : elemB
value: 199
key  : elemA
value: 123

তথ্যসূত্র


1
আমি সবেমাত্র পেয়েছি এটি সংখ্যাসূচকভাবে সূচিকৃত অ্যারেগুলির জন্যও কাজ করে: astr2=(a b c d e);echo ${!astr2[@]};unset astr2[2];echo ${!astr2[@]}থেক্স!
অ্যাকোরিয়াস পাওয়ার

@ অ্যাকোরিয়াস পাওয়ার - হ্যাঁ আপনি যদি আমার উত্তরগুলিতে সম্পাদনাগুলি রোল করেন তবে আপনি দেখতে পাবেন যে আমি মূলত সংখ্যাসূচক সূচকটিও অন্তর্ভুক্ত করেছি, তবে আপনি নাম হ্যাশ চেয়েছিলেন তাই এটিকে ফেলে দিয়েছেন।
slm

লক্ষ্য করুন ${!var[index]}না কাজ, শুধুমাত্র নেই ${!var[@]}বা ${!var[*]}না :(
i336_

@ i336_ - !এটি এখনই শেষ করুন ${var[index]}tldp.org/LDP/abs/html/arrays.html
SLM

দুঃখিত, ব্যাখ্যা: আমি সংখ্যার সূচক এন এর জন্য সহযোগী কী নির্ধারণ করার চেষ্টা করছিলাম । আমি বুঝতে পেরেছিলাম যে আমি খুব সহজেই কাজটি করতে পারি keys=(${!var[@]})এবং তারপরে ${keys[n]}আমাকে সূচকটি দিয়েছিলাম তবে একই সাথে আমি বুঝতে পারি যে আমার পদ্ধতির পুনর্বিবেচনা করা দরকার।
i336_
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.