Multi-Dimensional Arrays in Bash
Bash does not support multi-dimensional arrays, but there is a way to imitate this functionality, if you absolutely have to.
As a quick example, here’s a data table representing a two-dimensional array.
1 | 2 | 3 | |
a1 | n1 | n2 | n3 |
a2 | m1 | m2 | m3 |
And here’s the graphical representation of this two-dimensional array with the values you would expect for each y[x] position:
a2[0] | a2[1] | a2[2] | |
a1[0] | n1m1 | n1m2 | n1m3 |
a1[1] | n2m1 | n2m2 | n2m3 |
a1[2] | n3m1 | n3m2 | n3m3 |
And here’s how we do it:
a=('a1=(n1 n2 n3)' 'a2=(m1 m2 m3)') for i in "${a[@]}"; do eval "${i}"; done x=0;y=2;echo "${a1[${x}]}${a2[${y}]}"
What about a three-dimensional array? Not gonna draw you a cubical table, but here’s the code:
a=('a1=(n1 n2 n3)' 'a2=(m1 m2 m3)' 'a3=(o1 o2 o3)') for i in "${a[@]}"; do eval "${i}"; done x=0;y=2;z=1;echo "${a1[${x}]}${a2[${y}]}${a3[${z}]}"
This may seem a bit awkward and laborious, compared to the proper programming languages, but this can be extremely useful.
Think about it: a three-dimensional array holding data like timestamps, CPU I/O wait time, and network bandwidth utilization. This would be perfect for analyzing a CPU bottleneck that you suspect has something to do with time of day and network activity.