So, you want a Bash variable variable? You know, a variable that contains a variable name. No problem - Use indirect expansion or eval. Below are some examples and options.
Bash Indirect Expansion for Variable Variables
First, lets say you have a set of variables that contain integers.
bash$ ONE=1
bash$ TWO=2
bash$ THREE=3
Next, you want to store the variable name inside a variable called NUM.
bash$ NUM=TWO
This is how you expand $NUM to give you the value of the variable name it is storing.
bash$ echo ${!NUM}
2
Again, if you change $NUM to THREE:
bash$ NUM=THREE
You can expand $NUM to get the value of the variable name stored in $NUM:
bash$ echo ${!NUM}
3
Here is an example that provides you with the number of days in the current month.
#!/bin/bash
THISMONTH=$(date +'%b')
Jan=31 Mar=31 May=31 Aug=31 Oct=31 Dec=31
Apr=30 Jun=30 Sep=30 Nov=30
Feb="28 or 29"
echo "${!THISMONTH} days in $THISMONTH"
exit $?
Eval for Bash Variable Variables
You can alternatively use eval to accomplish variable variables:
bash$ FIVE=5
bash$ NUM=FIVE
bash$ eval echo \$$NUM
5
Here is an eval example that uses a variable as part of a variable name:
bash$ COLOR_RED=FF0000
bash$ COLOR_BLUE=0000FF
bash$ COLOR_GREEN=00FF00
bash$ MYCOLOR=RED
bash$ eval echo \$COLOR_$MYCOLOR
FF0000