루프에서 변수 변수 이름 사용

루프에서 변수 변수 이름 사용

저는 bash 스크립팅을 처음 접했고 스크립트에 필요한 모든 정보를 수집했습니다.

변수 이름을 가진 배열을 반복하고 싶습니다. 지금까지 내 스크립트는 다음과 같습니다.

#!/bin/bash
declare -a bff=("Abnehmen" "Buecher" "Dating" "Dating" "Fitness" "Handy" "Hunde" "Reisen" "Schmuck" "Schwanger" "Uhren")
declare -a dab=("baby" "beauty" "fitness" "haushalt" "heimwekren")
for product in bff dab; do
    echo "${product[@]}" #works fine, it echoes 'bff' in the first loop
        for sub in ${!product[@]}; do
                        echo "${product}/${sub}" #does not work, echoes 'bff/0'
        done
done

산출:

bff
bff/0
dab
dab/0
ddb
ddb/0
dwb
dwb/0
pod
pod/0

변수를 올바르게 에코할 수 있지만 for 루프에서는 사용할 수 없는 이유를 이해하지 못합니다. 내가 찾은 튜토리얼은 varibale 변수를 에코하는 것에 관한 것이었지만 이제 루프에서 이를 사용하는 방법에 관한 것입니다.

누구든지 여기에서 나를 도와주거나 올바른 방향으로 안내해 줄 수 있습니까?

내가 원하는 결과는 다음과 같습니다.

bff
bff/Abnehmen
bff/Buecher
bff/Dating
...
dab
dab/baby
dab/beauty
...

답변1

다음을 통해 변수 참조를 사용하십시오 declare -n refvar=$varname.

#!/bin/bash
declare -a bff=("Abnehmen" "Buecher" "Dating" "Dating" "Fitness" "Handy" "Hunde" "Reisen" "Schmuck" "Schwanger" "Uhren")
declare -a dab=("baby" "beauty" "fitness" "haushalt" "heimwekren")
for product in bff dab; do
    echo "${product[@]}" #works fine, it echoes 'bff' in the first loop
    declare -n parray=$product
        for sub in "${parray[@]}"; do
                        echo "${product}/${sub}" #does not work, echoes 'bff/0'
        done
done

bff
bff/Abnehmen
bff/Buecher
bff/Dating
bff/Dating
bff/Fitness
bff/Handy
bff/Hunde
bff/Reisen
bff/Schmuck
bff/Schwanger
bff/Uhren
dab
dab/baby
dab/beauty
dab/fitness
dab/haushalt
dab/heimwekren

관련 정보