Verwenden variabler Variablennamen in einer Schleife

Verwenden variabler Variablennamen in einer Schleife

Ich bin ziemlich neu im Bash-Scripting und sammle gerade alle Informationen, die ich für mein Skript brauche.

Ich möchte ein Array mit einem Variablennamen durchlaufen. Mein bisheriges Skript:

#!/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

Ausgabe:

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

Ich verstehe nicht, warum ich die Variable korrekt wiedergeben kann, sie aber nicht in der For-Schleife verwenden kann. Das Tutorial, das ich gefunden habe, befasste sich nur mit der Wiedergabe der Variable, aber jetzt mit der Verwendung in einer Schleife.

Kann mir hier jemand weiterhelfen oder mich in die richtige Richtung weisen?

Meine gewünschte Ausgabe wäre:

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

Antwort1

Verwenden Sie eine Variablenreferenz über 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

verwandte Informationen