Bash - 배열 루프를 사용하여 중첩된 for 루프

Bash - 배열 루프를 사용하여 중첩된 for 루프

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

관련 정보