1개의 배열과 2개의 연관 배열이 있습니다. 코드를 유지 관리할 수 있기를 원하기 때문에 기본 배열 목록을 사용하여 두 개의 연관 배열을 반복하고 싶습니다. 하지만 제대로 이해하지 못하는 것 같습니다.
연관 배열의 키 값을 인쇄하려고 하면 결과가 항상 0입니다.
아래는 내 샘플 코드입니다.
declare -A list_a list_b
list_a=( [a]=1 [b]=2)
list_b=( [c]=3 [d]=4)
master_list=(list_a list_b)
for thelist in "${master_list[@]}"
do
for key in "${!thelist[@]}"
do
#it show be printing out the keys of the associative array
echo "the key is: $key"
done
done
Output:
the key is: 0
the key is: 0
문제가 무엇인지 아시나요?
답변1
배열 간접 참조를 확장하려면 문자열이 [@]
변수의 일부여야 합니다. 다음 값으로 작동합니다.
for thelist in "${master_list[@]}" ; do
reallist=$thelist[@]
for key in "${!reallist}" ; do
echo "the key is: $key"
done
done
열쇠의 경우 eval
.
for thelist in "${master_list[@]}" ; do
eval keys=('"${!'$thelist'[@]}"')
for key in "${keys[@]}" ; do
echo "the key is: $key"
done
done
master_list에 변수 이름만 포함되어 있는지 확인하는 한 안전해야 합니다.
답변2
놀기 재미있다세게 때리다, 하지만 bash에는 여러분의 상상력을 만족시킬 수 없는 몇 가지 문제가 있는 것 같습니다 ;)
list_a=( 1 2 )
list_b=( 3 4 )
for key in "${list_a[@]}" "${list_b[@]}"; do
echo "the key is: $key"
done
산출:
the key is: 1
the key is: 2
the key is: 3
the key is: 4