RDK
RDK

Reputation: 953

Getting variable values from variable names listed in array in Bash

I'm trying to print values of multiple variables that are listed in a Bash array as evident in the minimal code example below.

#!/bin/bash
VAR1="/path/to/source/root"
VAR2="/path/to/target/root"
VAR3="50"

VARS=("VAR1" "VAR2" "VAR3")
for var in ${VARS[*]}; do
    echo "value of $var is ${$var}"
done

This gives me an error

line 8: value of $var is ${$var}: bad substitution

I want the following output:

value of VAR1 is /path/to/source/root
value of VAR2 is /path/to/target/root
value of VAR3 is 50

My search on Google and SO was not very fruitful. Because of the indirection (i.e., var iterates over an array containing names of variables for which I want the values), I'm not able to precisely word my search. But any help is appreciated.

Upvotes: 1

Views: 110

Answers (1)

anubhava
anubhava

Reputation: 785128

Use indirect reference as:

#!/bin/bash
VAR1="/path/to/source/root"
VAR2="/path/to/target/root"
VAR3="50"

VARS=("VAR1" "VAR2" "VAR3")
for var in ${VARS[*]}; do
    echo "value of $var is ${!var}"
done

Output:

value of VAR1 is /path/to/source/root
value of VAR2 is /path/to/target/root
value of VAR3 is 50

Upvotes: 2

Related Questions