Reputation: 14458
Suppose I have some bash
arrays:
A1=(apple trees)
A2=(building blocks)
A3=(color television)
And index J=2
, how to get the array contents of A2
?
Upvotes: 27
Views: 4984
Reputation: 295472
Today (with bash 4.3 and later), the best practice is to use nameref support:
A1=(apple trees)
A2=(building blocks)
A3=(color television)
J=2
declare -n A="A$J"
printf '%q\n' "${A[@]}"
...will properly emit:
building
blocks
This is also available as nameref A="A$J"
on ksh93. See BashFAQ #6 for details.
Upvotes: 5
Reputation: 211
It’s worth to note, that even an index will be substituted at time the variable is evaluated:
$ A2=(building blocks)
$ Aref=A2[index]
$ index=1
$ echo "${!Aref}"
blocks
Upvotes: 21
Reputation: 14458
I've already found a resolution, this can be done by:
$ Aref=A$J
$ echo ${!Aref}
building
$ Aref=A$J[1]
$ echo ${!Aref}
blocks
$ Aref=A$J[@]
$ echo "${!Aref}"
building blocks
Upvotes: 22