Indirect variables in Bash


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Indirect variables in Bash
# 1  
Old 02-11-2013
Indirect variables in Bash

Hello,
I've spent hours this morning reading various past forum posts and documentation pages but I can't find exactly what I need.

I'm trying to call a variable with a variable in the name without having to make a third variable.

For example:

Code:
path=AB
legAB=50

leg$path

I want to be able to call leg$path variable and get the value "50"


I am aware that if I created another variable I could do this using the ${! } notation:

Code:
var=leg$path
echo ${!var}=50

However, I want to be able to miss out this last step. Is this possible?
Thanks,
Dan

Last edited by DFr0st; 02-11-2013 at 08:05 AM..
# 2  
Old 02-11-2013
A not-recommended way:
Code:
eval echo \$leg$path

By the way, I think you meant echo ${!var} instead of echo ${!leg}.
This User Gave Thanks to elixir_sinari For This Post:
# 3  
Old 02-11-2013
Hi,
Yep, that works. Why is it not recommended?

You were right, I made a mistake in the original post but it has now been changed.
# 4  
Old 02-11-2013
Because if $path is obtained from user input or an input file, or otherwise not under your control someone could execute code with the permissions of the person executing the script.

If you are using bash 4 or you could switch to ksh93 then an alternative might be associative arrays:

Code:
leg=([AB]=50 [CD]=40)
echo "${leg[AB]}"

This User Gave Thanks to Scrutinizer For This Post:
# 5  
Old 02-11-2013
This is easiest done with read. It's handy because it takes a variable name, which you can construct by any means you want.

Code:
 read $A$B <<<"string"

These 2 Users Gave Thanks to Corona688 For This Post:
# 6  
Old 02-11-2013
Thanks Scrutinizer and Corona. However, how do you implement "read" to do this? I've been playing with it and reading about it but can't find anything about this usage.
# 7  
Old 02-11-2013
Kind of exactly how I've shown you.

Code:
A="abc"
B="def"

read $A$B <<<"string"

...should put the string "string" into the variable named abcdef.

This is how it's often used:
Code:
read VARNAME

...but note that it takes a variable name -- a string -- not the variable itself. You can feed it whatever string you please, derived from whatever variables you please, and do things that would otherwise require ugly insecure eval hacks.

You can redirect into it any way you please. <<< is an ordinary redirection in BASH which replaces stdin with a string.
These 2 Users Gave Thanks to Corona688 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Passing awk variables to bash variables

Trying to do so echo "111:222:333" |awk -F: '{system("export TESTO=" $2)}'But it doesn't work (2 Replies)
Discussion started by: urello
2 Replies

2. Shell Programming and Scripting

BASH arrays and variables of variables in C++

Sometimes it is handy to protect long scripts in C++. The following syntax works fine for simple commands: #define SHELLSCRIPT1 "\ #/bin/bash \n\ echo \"hello\" \n\ " int main () { cout <<system(SHELLSCRIPT1); return 0; } Unfortunately for there are problems for: 1d arrays:... (10 Replies)
Discussion started by: frad
10 Replies

3. Shell Programming and Scripting

Indirect Referral Script

I have a file with two columns of numbers (member IDs): 1 1 2 1 3 1 4 2 5 4 6 1 7 5 8 3 9 2 Think of column 1 as the referee and column 2 as the referrer. Is there a good way to backtrack who referred who? I would like an output, for this example here to be: 1 1 2 1 3 1 4 2 1 (2 Replies)
Discussion started by: mdlloyd7
2 Replies

4. Shell Programming and Scripting

Does SH support indirect expansion like BASH?

Hello, is there a kind soul who can answer me, does the SH support double substitution known as indirect expansion similar to BASH? The syntax for bash is ${!var}. For instance in bash I can write something like this: VAR="value" REF_VAR="VAR" echo ${!REF_VAR} and get the "value"... (1 Reply)
Discussion started by: dimentiy
1 Replies

5. Shell Programming and Scripting

Indirect variable assignment

Hi I have variable A_B=alpha also var1="A" var2="B" I want to retrieve the value alpha using var1 and var2 , somthing like echo ${${var1}_${var2}} that works. Obviously this is receiving syntax error (6 Replies)
Discussion started by: sumir
6 Replies

6. Linux

How to get an Indirect Variable Value..?

Hi, I've got a small problem. If varible A stores "B" and Variable B stores C, How to get the value of variable B by using only Variable A..? I tried the following but didnt work pease help.. $ var1=vikram $ echo $var1 vikram $ vikram=sampath $ echo $vikram sampath $ echo... (6 Replies)
Discussion started by: vickramshetty
6 Replies

7. Shell Programming and Scripting

Bash variables

Ummm can anybody help me with this one? Its prob quite simple. I bascially have a file name say J1x2x3x7.dat Im using the file name as a variable in a bash script. Want I want to do is extract most of the file name and make it a new variable expect with say one of the number now a... (2 Replies)
Discussion started by: RichieFondel
2 Replies

8. Shell Programming and Scripting

Length of an indirect variable

The construct ${#parameter} returns the number of characters in the parameter and ${!parameter} specifies an indirect variable. My question is: How do I combine these two. What I want is ${#!parameter} but this gives an error. Of course I can use: dummy=${!parameter} ${#dummy} but that's a... (0 Replies)
Discussion started by: gone_bush
0 Replies

9. UNIX for Advanced & Expert Users

Compound indirect variable references

Using bash, I'm trying to read a .properties file (name=value pairs), assigning an indirect variable reference for each line in the file. The trick is that a property's value string may contain the name of a property that occurred earlier in the file, and I want the name of the 1st property to... (5 Replies)
Discussion started by: tkrussel
5 Replies
Login or Register to Ask a Question