Bash配列の値は、ループ内の変数のように動作します。

Bash配列の値は、ループ内の変数のように動作します。

ループの配列名などの配列値を使用して二重ループを実行しようとしています。

array1="name1 name2"
name1="one two"
name2="red blue"

for name in $array1
do 
  for value in $name
  do
    echo "$name - $value"
  done
done

2番目のループでは、「$ name」に「name」を使用する必要がありますが、これは機能しません。
配列名のように、2番目のループでarray1値をどのように使用できますか?

ベストアンサー1

これはあなたがいる場所ではありませんbash

a="foo bar"

文字列/スカラー変数を定義します。分割+グローブ演算子を実行するために(引用符なしで)使用されます。これは$a、ファイルパターンの区切りリストを表す文字列にのみ意味があります。$IFS

bash配列は次のように定義されます。

a=(foo bar)

ここで欲しいものは次のとおりです。

array1=(name1 name2)
name1=(one two)
name2=(red blue)


for name in "${array1[@]}"
do
  typeset -n nameref="$name"
  for value in "${nameref[@]}"
  do
    printf '%s\n' "$name - $value"
  done
done

typeset -n比較的新しい追加bashであり、ステータス名前参照は他の変数の名前を含む変数で、拡張すると実際には指定された変数を指す。

おすすめ記事