সহযোগী অ্যারে সহ শেলস
কিছু আধুনিক শেলগুলি সম্মিলিত অ্যারে সরবরাহ করে: ksh93, ব্যাশ ≥4, zsh। Ksh93 এবং bash এ, যদি a
কোনও সহযোগী অ্যারে "${!a[@]}"
হয় তবে এর কীগুলির অ্যারেটি হ'ল:
for k in "${!a[@]}"; do
echo "$k -> ${a[$k]}"
done
Zsh এ, সেই সিনট্যাক্সটি কেবল ksh এমুলেশন মোডে কাজ করে। অন্যথায় আপনাকে zsh এর নেটিভ সিনট্যাক্স ব্যবহার করতে হবে:
for k in "${(@k)a}"; do
echo "$k -> $a[$k]"
done
${(k)a}
a
খালি কী না থাকলে এছাড়াও কাজ করে।
Zsh এ আপনি একই সাথে উভয় k
আইস এবং v
প্রান্তিকদের উপর লুপ করতে পারেন :
for k v ("${(@kv)a}") echo "$k -> $v"
সহযোগী অ্যারে ছাড়া শেলস
শেলগুলিতে এসোসিয়েটিভ অ্যারেগুলিকে এমুলেটিং করা অনেক বেশি কাজ। আপনার যদি সহযোগী অ্যারেগুলির প্রয়োজন হয় তবে সম্ভবত সম্ভবত এখন কোনও বড় সরঞ্জাম আনার সময় হবে, যেমন ksh93 বা পার্ল।
যদি আপনার কেবলমাত্র পসিক্স শেলটিতে সহযোগী অ্যারেগুলির প্রয়োজন হয় তবে এগুলি অনুকরণ করার একটি উপায় এখানে রয়েছে যখন কীগুলিতে কেবল অক্ষর 0-9A-Z_a-z
(এএসসিআইআই ডিজিট, অক্ষর এবং আন্ডারস্কোর) অন্তর্ভুক্ত থাকে। এই অনুমানের অধীনে, কীগুলি চলক নামের অংশ হিসাবে ব্যবহার করা যেতে পারে। নীচের ফাংশনগুলি একটি নামকরণ উপসর্গ দ্বারা চিহ্নিত একটি অ্যারের উপর কাজ করে, "স্টেম", যা অবশ্যই পরপর দুটি আন্ডারস্কোর না থাকতে পারে।
## ainit STEM
## Declare an empty associative array named STEM.
ainit () {
eval "__aa__${1}=' '"
}
## akeys STEM
## List the keys in the associatve array named STEM.
akeys () {
eval "echo \"\$__aa__${1}\""
}
## aget STEM KEY VAR
## Set VAR to the value of KEY in the associative array named STEM.
## If KEY is not present, unset VAR.
aget () {
eval "unset $3
case \$__aa__${1} in
*\" $2 \"*) $3=\$__aa__${1}__$2;;
esac"
}
## aset STEM KEY VALUE
## Set KEY to VALUE in the associative array named STEM.
aset () {
eval "__aa__${1}__${2}=\$3
case \$__aa__${1} in
*\" $2 \"*) :;;
*) __aa__${1}=\"\${__aa__${1}}$2 \";;
esac"
}
## aunset STEM KEY
## Remove KEY from the associative array named STEM.
aunset () {
eval "unset __aa__${1}__${2}
case \$__aa__${1} in
*\" $2 \"*) __aa__${1}=\"\${__aa__${1}%%* $2 } \${__aa__${1}#* $2 }\";;
esac"
}
(সতর্কতা, অরক্ষিত কোড synt সিনট্যাক্টিকালি অবৈধ কান্ড এবং কীগুলির জন্য ত্রুটি সনাক্তকরণ সরবরাহ করা হয়নি))