2

I have an array called "loop".

For each element in "loop" I want to create an array whose name contains the text of the current element.

I then want to loop through each new array and print every element from each array.


This post seems to have a good solution for variables but I do not know how to adapt it to work for arrays.


My Script

#!/bin/bash
loop=(
first
second
third
)

for word in "${loop[@]}"    
do
        declare "${word}_holder=( hello world )"
        var="${word}_holder"
        echo "$var"
        for i in "${!var}[@]"
        do
                echo "$i"
        done
done

Current output

first_holder
( hello world )[@]
second_holder
( hello world )[@]
third_holder
( hello world )[@]

Desired Output

first_holder
hello
world
second_holder
hello
world
third_holder
hello
world

2 Answers 2

6
for word in "${loop[@]}"; 
do 
   name="${word}_holder";
   declare -a "$name"; 
   declare -n arr="$name";
   echo $name;
   arr=(hello world);
   arr_ref="$name[@]";
   for w in "${!arr_ref}";
   do 
      echo $w; 
   done; 
done;                             

first_holder                                                                                                                              
hello                                                                                                                                     
world                                                                                                                                     
second_holder                                                                                                                             
hello                                                                                                                                     
world                                                                                                                                     
third_holder                                                                                                                              
hello                                                                                                                                     
world     

Of course there is no point of doing all this if you are not going to refer to the dynamically generated arrays (first_holder, etc) ever.

Sign up to request clarification or add additional context in comments.

Comments

5

It ain't pretty, but it's a start:

#!/bin/bash
loop=(
first
second
third
)

for word in "${loop[@]}"    
do
    var=${word}_holder
    eval "declare -a ${var}"
    eval "${var}=( Hello World )"
    eval 'nEntries=${#'${var}'[@]}'
    echo ${var}
    for (( ii=0; ii<$nEntries; ii++ )); do
       cmd='echo ${'${var}'['$ii']}'
       eval ${cmd}
    done
done

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.