Bash 評価配列変数名

Bash 評価配列変数名

私のbashの例は次のとおりです。

var最初のケースでは、「alias」を使用して実行したい操作は次のとおりですmyvarA

myvarA="variableA"
varname="A"
eval varAlias=\$"myvar"$varname
echo $varAlias

配列変数の2番目のケースとそのメンバーの反復は簡単です。

myvarA=( "variableA1" "variableA2" )
for varItem in ${myvarA[@]}
do
    echo $varItem
done

今、私は例1のような「エイリアス」技術を使用する必要がありますが、今回は配列変数について次のようになります。

eval varAlias=\$"myvar"$varname
for varItem in ${varAlias[@]}
do
    echo $varItem
done

myvarAただし、最後のケースでは、最初のメンバーのみが印刷されます。つまり、eval変数の値が評価されます。 var配列変数を次evalのように評価するにはどうすればよいですか?配列変数の名前いいえ変数値

ベストアンサー1

パラメータ拡張の最も簡単な形式は次のとおりです${parameter}
混乱した状況では、中括弧を使用する方が良い方法です。

「myvarA」配列にスペースが含まれる可能性を考えると、これが答えだと思います。

#!/bin/bash -x
myvarA=( "variable  A1" "variable  A2" )
varname="A"

eval varAlias=( '"${myvar'${varname}'[@]}"' )
eval varAlias=( \"\${myvar${varname}[@]}\" ) # both works
for varItem in "${varAlias[@]}" # double quote and `@' is needed
do
    echo "$varItem"
done

おすすめ記事