名前を変数として参照して bash 配列を検索します。

名前を変数として参照して bash 配列を検索します。

Bash 拡張の助けが必要です。
配列値GNU bash 5.1.0を検索したいです。配列名は変数でなければなりません。 bashで変数を参照する「ただ」です。

$gral変数には名前を持つ「armin」という配列があります(うまくいきます)。

gral="armin"

課題:

declare -a ${gral}[1]="milk"
declare -a ${gral}[2]="cow"
declare  ${gral}[7]="budgie"
declare  ${gral}[9]="pla9ne"

美しい。

配列が存在します。

$ echo ${armin[@]}
milk cow budgie pla9ne

配列インデックスが存在します。

$echo ${!armin[@]}
1 2 7 9

配列とインデックスは大丈夫です。

配列を参照して配列を検索したいと思います。変数に名前を付ける、手動ではありません。
以前に設定され使用されていた多くの変数があります。

$ echo $gral
armin  ## name of our bash array

とても良い - 今までは。

変数を使用せずに違いを表示するには:

echo ${armin[@]}
milk cow budgie pla9ne

次に、変数(gral)を参照して名前(armin)を呼び出してみてください。

$ echo ${$gral[@]}
-bash: ${$gral[@]}: wrong substitution.

$echo ${"$gral"[@]}
-bash: ${"$gral"[@]}: wrong substitution.
echo ${"gral"[@]}
-bash: ${"gral"[@]}: wrong substitution.
echo ${${gral}[@]}
-bash: ${${gral}[@]}: wrong substitution.

すべて失敗しました。 「eval」も試しました。関連(statement-A)を使用しても違いはありません。

注:索引付けはこの方法で問題なくうまく機能します。名前が問題ですね。

何か抜けていると思います。おそらく答えは以前に説明されたでしょう。私は配列の変数に関する興味深い内容をたくさん見つけましたが、私の課題に対する答えを特定できませんでした。

できますか?配列名を変数として参照して、配列を検索する用語を見つけるのに役立ちます。

ベストアンサー1

namerefを使用する(Bash> = 4.3):

$ armin=(foo bar doo)
$ declare -n gral=armin      # 'gral' references array 'armin'  
$ gral[123]=quux             # same as 'armin[123]=quux'
$ echo "${gral[@]}"
foo bar doo quux
$ echo "${gral[1]}"
bar
$ echo "${!gral[@]}"         # listing the indexes works too
0 1 2 123

また見なさい:Bashはポインタの使用をサポートしていますか?

おすすめ記事