bash 연관 배열 변수에 모든 '색인 ID'(키)를 나열하는 방법이 있습니까?


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[@]}thx!
물병 자리 힘

@ AquariusPower-그래 내 대답에 편집 내용을 롤백하면 원래 숫자 인덱스도 포함되었지만 해시라는 이름을 지정했기 때문에 삭제했다는 것을 알 수 있습니다.
slm

참고이 ${!var[index]}작동하지 않음 만 ${!var[@]}또는 ${!var[*]}:( 할
i336_

@ i336_- !밖으로 나가십시오 ${var[index]}. tldp.org/LDP/abs/html/arrays.html
slm

죄송합니다. 설명 : 숫자 인덱스 n에 대한 연관 키를 결정하려고했습니다 . 내가 쉽게 할 수 실현 keys=(${!var[@]})다음과 ${keys[n]}나에게 인덱스를 제공하지만 또한 실현 같은시기에 나는 나의 접근 방식을 재고 할 필요가있다.
i336_ 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.