Loop through array of arrays of string with spaces Loop through array of arrays of string with spaces shell shell

Loop through array of arrays of string with spaces


I think you meant that the output should look like:

AA  QQBB  LLCCDDEEFF

i.e.:

${low1[0]}${low1[1]}${low2[0]}${low2[1]}${low3[0]}${low3[1]}

This could be accomplished using:

#!/bin/bashlow1=("AA  QQ" "BB  LL")low2=("CC" "DD")low3=("EE" "FF")high=(low1 low2 low3)for high_item in ${high[@]}do    x="${high_item}[@]" # -> "low1[@]"    arrays=( "${!x}" )    #IFS=$'\n'    for item in "${arrays[@]}"    do        echo "$item"    donedone

And please always use #!/bin/bash for bash scripts.

Explanation: ${!x} is indirect variable expansion. It evaluates to the value of variable with a name contained in $x.

For our needs, x needs to have the [@] suffix for array expansion as well. Especially note that it is x=${high_item}[@] and not x=${high_item[@]}.

And you have to evaluate it in array context; otherwise, it wouldn't work as expected (if you do arrays=${!x}).

Ah, and as final note: IFS doesn't make any difference here. As long as you are working on quoted arrays, IFS doesn't come into play.


Replace eval with indirect parameter expansion, and you'll get what I think you want (although it doesn't match your current given output:

for high_item in "${high[@]}"do    arrayz="$high_item[@]"    # arrayz is just a string like "low1[@]"    for item in "${!arrayz}"    do        echo $item    donedone

Note the need to quote the array expansion in the inner loop to preserve the whitespace in elements of low1.