ループ内の変数変数名の使用

ループ内の変数変数名の使用

私は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ループでは使用できない理由を理解できません。私が見つけたチュートリアルは可変変数をエコーすることに関するものでしたが、今ではループでそれを使う方法についてです。

誰でも私を助けたり、正しい方向を教えてもらえますか?

私が望む出力は次のとおりです。

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

おすすめ記事