Variables: Pointers

You can use indirection to access different variables. So in effect a variable acts as pointer to another variable. You do an indirect read from a variable with ${!}

a=1
b=2
c=3

for p in a b c
do
   printf "%s=%s\n" "${p}" "${!p}"
done

Output:

a=1
b=2
c=3

To perform an indirect write into a variable use printf -v. You can also use eval but that’s a bit more error prone due to quoting in my opinion.

i=1000
for p in a b c
do
   printf -v "${p}" "%d" "${i}"
   i=$(( i + 1000 ))
done

printf "a=%s\n" "${a}"
printf "b=%s\n" "${b}"
printf "c=%s\n" "${c}"

Output:

a=1000
b=2000
c=3000

Pointers can be very powerful and open up lots of opportunities.