Bash: Dynamically named variables
Sometimes you want to run a series of commands that are slightly different, but for each command the arguments must also be slightly different. Say, for example, you have a script that runs multiple other commands and you want to give each one a temporary file to put its results in, then combine these at the end.
For this, you may want to use Dynamically Named Variables, variables whose names are determined programmatically.
Creating A Dynamic Variable
numberofvariables=5 for ((i=0; i<${numberofvariables}; ++i)); do declare var${i}="${i}" done
The above code will create variables named var0
to var4
containing the numbers 0 to 4.
The declare
keyword there is important otherwise Bash tries to interpret it as a command, so this makes it clear that we want this to be a variable.
Using A Dynamic Variable
# One at a time... echo "${var0}" echo "${var1}" # etc. # Programmatically... for ((i=0; i<${mumberofvariables}; ++i)); do normalvar=var${i} echo "${!normalvar}" done
Using a dynamic variable when knowing which one you want is easy, but if you stored file names in these variables and wanted to join them all together, you’ll need to be able to use them programmatically as well.
Here, a normal variable is used to allow Bash to properly evaluate the dynamic variable name for this iteration of the loop.
The !
after the opening braces tells Bash to use the contents of the normal variable as the real variable name.
No Comments