I\'m trying to loop through an array that contains other arrays and these arrays consist of strings with spaces. The problem is that I can\'t seem to preserve the spacing in the
I think you meant that the output should look like:
AA QQ
BB LL
CC
DD
EE
FF
i.e.:
${low1[0]}
${low1[1]}
${low2[0]}
${low2[1]}
${low3[0]}
${low3[1]}
This could be accomplished using:
#!/bin/bash
low1=("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"
done
done
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.