August 2011
Beginner to intermediate
600 pages
14h 29m
English
Indirection
One particularly useful trick in the bash shell is indirection. You’ll have to be a little bit careful when using it, as it’s easy to get confused as to which variable is which, but it can be a real life-saver.
It is possible to use the value of one variable as the name of anther variable. For example, the following:
for mything in PATH GDMSESSION HOSTNAME
do
echo $myvar is ${!myvar}
done
will run like this:
PATH is /usr/bin:/bin:/usr/local/bin:/home/steve/bin:/usr/games GDMSESSION is gnome HOSTNAME is declan
Not terribly useful, at first glance. But it means that you can create your own variable names on-the-fly and then access the data within that name:
$ cat empdata.sh
#!/bin/bash
# Employee Data
Dave_Fullname="Dave Smith"
Dave_Country="USA"
Dave_Email=dave@example.com
Jim_Fullname="Jim Jones"
Jim_Country="Germany"
Jim_Email=jim.j@example.com
Bob_Fullname="Bob Anderson"
Bob_Country="Australia"
Bob_Email=banderson@example.com
echo "Select an Employee:"
select Employee in Dave Jim Bob
do
echo "What do you want to know about ${Employee}?"
select Data in Fullname Country Email
do
echo $Employee # Jim
echo $Data # Email
empdata=${Employee}_${Data} # Jim_Email
echo "${Employee}'s ${Data} is ${!empdata}" # jim.j@example.com
break
done
break
done
empdata.sh
$ ./empdata.sh Select an Employee: ...