มีวิธีรายการ 'ดัชนีรหัส' (กุญแจ) ทั้งหมดในตัวแปรอาเรย์ของ bash หรือไม่


26

ฉันมีชุดนี้:

declare -A astr

ฉันเพิ่มองค์ประกอบเข้าไป:

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

แต่ต่อมาฉันต้องรู้ว่า ID ดัชนี (elemA และ elemB) คืออะไรและแสดงรายการเหล่านั้น

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[@]}ขอบคุณ!
กุมภ์

@AquariusPower - ใช่ถ้าคุณย้อนกลับการแก้ไขในคำตอบของฉันคุณจะเห็นว่าฉันได้รวมดัชนีตัวเลขด้วย แต่แรกแล้วลดลงเนื่องจากคุณต้องการแฮชที่มีชื่อ
slm

โปรดทราบว่า${!var[index]}ใช้งานไม่ได้มีเพียง${!var[@]}หรือ${!var[*]}ทำ: (
i336_

@ i336_ - ถอด!มัน${var[index]}ออก tldp.org/LDP/abs/html/arrays.html
slm

ขออภัยชี้แจง: ผมพยายามที่จะตรวจสอบที่สำคัญเชื่อมโยงสำหรับตัวเลขดัชนีn ฉันรู้ว่าฉันสามารถทำได้ง่าย ๆkeys=(${!var[@]})จากนั้น${keys[n]}ให้ดัชนีกับฉัน แต่ในเวลาเดียวกันฉันก็ตระหนักว่าฉันต้องคิดทบทวนแนวทางของฉัน
i336_
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.