Dynamic variable names in Bash

In Bash, dynamic variables can be created using indirect expansion.

How to create a dynamic variable name

In a CI container, there may be a need to delineate between different environment variable values using a prefix for a variable name.

1
2
3
4
5
6
#!/bin/sh
# In the container at runtime:
# export PROD_TOKEN="123"
env="PROD"
secret="${env}_TOKEN"
echo ${!secret}

Output:

1
123

In the example above, the secret value is PROD_TOKEN after expansion. Using indirect expansion, ${!secret} references 123.