How to read value of variable, where the name of variable is the value of another variable

I think an example is in order. Consider I have these two environment variables setup (by a Continuous Delivery tool): PACKAGE_VER=1.2.3 and USE_VERSION_FROM=PACKAGE_VER.

What I want now is a script that can’t predict the name of the variable pointing out 1.2.3, only USE_VERSION_FROM. And so, I’m looking for a way to get my script to know the version to use (1.2.3) without knowing anything other than that USE_VERSION_FROM points out the name of the variable that holds the version number.

My naïve non-working first attempt:

#!/bin/bash
VERSION_TO_USE="${${USE_VERSION_FROM}}"

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

PACKAGE_VER=1.2.3
USE_VERSION_FROM=PACKAGE_VER
VERSION_TO_USE=${!USE_VERSION_FROM}
echo $VERSION_TO_USE
1.2.3

This is “indirect parameter expansion” as described in the bash manual

Note, it’s not strictly necessary to provide quotes on a variable assignment a=$b vs a="$b" — word splitting is not performed during an assignment (can’t find the reference for that just now)


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x