http://mywiki.wooledge.org/BashFAQ/006
You probably need an associative array .
typeset -A arr=([foo;bar]=test)
printf '%s\n' "${arr[$(printf '%q;%q' "$var1" "$var2")]}"
${!var} , eval. eval , bash . wiki . "namerefs" - bash 4.3, .
var1=foo
var2=bar
foobar=test
ref=${var1}${var2}
printf '%s\n' "${!ref}"
typeset -n ref2=${var1}${var2}
printf '%s\n' "$ref2"
if [[ $ref == [a-zA-Z_]+([a-zA-Z0-9_]) ]]; then
eval printf '%s\\n' "\${$ref}"
eval printf '%s\\n' "$(printf '${%q}' "$ref")"
fi