0

私はこれに数時間を費やしましたが、解決策が見つからないようです。

コードで 3 つの連想配列を設定しました。

テンプレート1 テンプレート2 テンプレート3

これは実際には n 個の配列である可能性があり、カウンター変数もコードで設定されているため、次のようになります。

template_name="template$counter"

作成する次のテンプレートを提供します。したがって、私の問題は、n個の連想配列をループしたいときです。次のようなことをする必要があります。

for (( i = 1; i < $counter; i++ )); do
  template_name="template$i"
    for i in ${!template_name[@]}; do
      echo "$i - ${template_name[$i]}"
    done
done

しかし、それは機能しません - 悪い置換エラーが発生します。変数名を使用して連想配列に動的にアクセスすることはできないようです。この問題を見る他の方法はありますか?

4

2 に答える 2

1

さらに掘り下げた後、答えを見つけました:

eval echo "APP_NAME $template_name: "\${${template_name}[APP_NAME]}
于 2013-06-26T03:52:43.887 に答える
0

これが期待どおりかどうかは正確にはわかりませんが、eval を使用するよりも優れた解決策を見つけるのに役立つと思います。

#!/bin/bash
template0=( "123" "456" )
template1=( "zxc" "edc" )

counter=2
for (( i = 0; i != $counter; ++i )); do
    template_name="template$i[@]"
    echo ${!template_name}
    for j in ${!template_name}; do
        echo "$j - template$i"
    done
done

プロデュース:

==> 123 456
==> 123 - template0
==> 456 - template0
==> zxc edc
==> zxc - template1
==> edc - template1
于 2013-10-07T23:47:27.460 に答える