Sponsored Content
Top Forums Shell Programming and Scripting Variable substitution with arrays Post 303002468 by bakunin on Friday 25th of August 2017 03:17:06 AM
Old 08-25-2017
Quote:
Originally Posted by Kingzy
Then I attempted to loop through each array as such:

Code:
for i in "${index[@]}" ; do
	echo ${i};
	for j in "${all[@]}" ; do
		echo ${!j[${i}]};
	done
done

But this time I'm only getting items at index 0, as per the output below:
The underlying problem is: arrays in bash (and ksh88 as well) are ONE-dimensional. Therefore, you can create a variable holding a one-dimensional array, but you can't put other array variables as elements into this array.

You could use the following workaround, but i strongly suggest you don't. Stretching the limits of what can be done is fun and helps learning the trade, but you shouldn't put circus tricks into production code. So, with this (rather big) grain of salt, here it goes:

Variables are evaluated always in the same step and all at the same time, which is why you cannot do things like this:

Code:
xfoo="abc"
yfoo="def"
selector="x"

echo ${${selector}foo}

This would rely on "${selector}" to be evaluated first and only then the resulting "${xfoo}" to be evaluated again. But, as i said, this is not the case and therefore this will fail.

There is one remedy for that, though: the keyword eval. eval starts the evaluation process again and this way you get (among other things) a second evaluation phase for your variables:

Code:
xfoo="abc"
yfoo="def"
selector="x"

eval echo \${${selector}foo}

The same way you can create sort-of two-dimensional arrays by using this mechanism:

Code:
arr1[1]="arr1.1"
arr1[2]="arr1.2"
arr1[3]="arr1.3"
arr1[4]="arr1.4"

arr2[1]="arr2.1"
arr2[2]="arr2.2"
arr2[3]="arr2.3"
arr2[4]="arr2.4"

arr3[1]="arr3.1"
arr3[2]="arr3.2"
arr3[3]="arr3.3"
arr3[4]="arr3.4"


for i in 1 2 3 ; do
     for j in 1 2 3 4 ; do
         eval echo \${arr${i}[$j]}
     done
done

But again: avoid eval like the plague and if you have to use it this is usually indicative that you better search for an alternative. As a show-off of skill, though, it is pretty cool. No?

I hope this helps.

bakunin
This User Gave Thanks to bakunin For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Substitution in a variable

Hey All, I'm trying to clean up a variable using sed but It dosn't seem to work. I'm trying to find all the spaces and replace them with "\ " (a slash and a space). For Example "Hello World" should become "Hello\ World". But it does nothing. If I put it directly into the command line it works... (3 Replies)
Discussion started by: spragueg
3 Replies

2. UNIX for Dummies Questions & Answers

variable substitution

Hi everyone, I have a simple question to ask : In a script that I'm writting, I need to create variables on-the-fly. For instance, for every iterartion of the following loop a var_X variable should be generated : #!/bin/ksh a="1 2 3" for i in $a do var_${i}=$i echo "${var_$i}" done ... (1 Reply)
Discussion started by: ck-18
1 Replies

3. Shell Programming and Scripting

Variable Substitution

I have run into a wall with my iptables firewall scripting. I am blocking all of the private side IP addresses on the WAN interface on systems running NAT. However, if the system is not running NAT and needs to allow access to the local LAN on the WAN interface, I need to block all but one of... (2 Replies)
Discussion started by: garak
2 Replies

4. Shell Programming and Scripting

Sed variable substitution when variable constructed of a directory path

Hello, i have another sed question.. I'm trying to do variable substition with sed and i'm running into a problem. my var1 is a string constructed like this: filename1 filerev1 filepath1 my var2 is another string constructed like this: filename2 filerev2 filepath2 when i do... (2 Replies)
Discussion started by: alrinno
2 Replies

5. UNIX for Dummies Questions & Answers

Variable substitution

Hi, That might be pretty simple. How can I generate a variable name and get their value ? Thanks a lot. Something like: >CUSTOMER_NF=26 > object=CUSTOMER > echo ${object}_NF CUSTOMER_NF > echo ${${object}_NF} ksh: ${${object}_NF}: 0403-011 The specified substitution is... (7 Replies)
Discussion started by: Leo_NN
7 Replies

6. Shell Programming and Scripting

variable substitution

file1.ksh #!/bin/ksh test5_create="I am a man" # test5 will be dynamic and the value will be passed from command line a=${1}_create echo $a # i need the output as "I am a man" ./file1.ksh test5 # i run the script like this any suggessions guys... (1 Reply)
Discussion started by: giri_luck
1 Replies

7. Shell Programming and Scripting

bash: combine arrays with weird substitution/references

Hi all. I'm trying to finish a bash script with the following elements: ARRAY="blah $ITEM blah blah" ARRAY="blah blah $ITEM blah bluh" #ARRAY="...." # ...the ARRAY elements represent a variable but defined # syntax and they're all hard-coded in the script. #(...) ITEMS='1.0 2.3... (2 Replies)
Discussion started by: yomaya
2 Replies

8. Shell Programming and Scripting

Variable Substitution

Hi , I have a variable as follows, Temp=`cat ABC.txt | cut -c5-` This will yeild a part of the date. say , 200912. I would like to substitute this variable's value in a filename. eg: File200912F.zip when i say File$TempF.zip , it is not substituting. Any help ? Thanks in... (2 Replies)
Discussion started by: mohanpadamata
2 Replies

9. Shell Programming and Scripting

How to use variable with command substitution in variable

For example I have variable like below echo $OUTPUT /some/path/`uname -n` when I try to use the variable OUTPUT like below cd $OUTPUT or cd ${OUTPUT} I am getting bad substituion error message $ cd $OUTPUT ksh: cd: bad substitution $ cd ${OUTPUT} ksh: cd: bad substitution ... (1 Reply)
Discussion started by: rajukv
1 Replies

10. Shell Programming and Scripting

Variable substitution

Hi, I have to write a shell script in which I have to substitute a variable within a variable. For example, var1=aaa var2=file.$var1.txt The output should be, echo $var2 file.aaa.txt Can someone please help me in getting this. I tried using eval, but it didnt work. I might be using it... (2 Replies)
Discussion started by: grajp002
2 Replies
All times are GMT -4. The time now is 05:38 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy