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