Bash Dynamic (variable) Variable Names


Answer :

If you want to reference a bash variable while having the name stored in another variable you can do it as follows:

$ var1=hello $ var2=var1 $ echo ${!var2} hello 

You store the name of the variable you want to access in, say, var2 in this case. Then you access it with ${!<varable name>} where <variable name> is a variable holding the name of the variable you want to access.


First of all there can not be any space around = in variable declaration in bash.

To get what you want you can use eval.

For example a sample script like yours :

#!/bin/bash i=0 for name in FIRST SECOND THIRD FOURTH FIFTH; do     eval "$name"="'$(( $i + 1 ))q;d'"     printf '%s\n' "${!name}"     i=$(( $i + 1 )) done 

Prints :

1q;d 2q;d 3q;d 4q;d 5q;d 

Use eval cautiously, some people call it evil for some valid reason.

declare would work too :

#!/bin/bash i=0 for name in FIRST SECOND THIRD FOURTH FIFTH; do     declare "$name"="$(( $i + 1 ))q;d"     printf '%s\n' "${!name}"     i=$(( $i + 1 )) done 

also prints :

1q;d 2q;d 3q;d 4q;d 5q;d 

What I get from your code and your desired output (correct me if I'm wrong):
There is no use of the "FIRST"/"SECOND"/... variable names, you just need a loop with an index...

This will do the job:

for i in {1..5} ; do echo $i"q;d" ; done


Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?