I\'m creating associative arrays to process in a for loop but i\'m getting some strange results in index order. Please take a look at this example script:
#!
According to comments this can be done to bypass this behavior.
order=(d1 e2 m3 o4)
declare -A test2=(
[d1]=1w45
[e2]=2dfg
[m3]=3df
[o4]=4df
)
for key in ${order[@]}; { echo $key ${test2[$key]}; }
d1 1w45
e2 2dfg
m3 3df
o4 4df
Or that
declare -A test3=(
[order]="1d 2e 3m 4o"
[1d]=1w45
[2e]=2dfg
[3m]=3df
[4o]=4df
)
for key in ${test3[order]}; { echo $key ${test3[$key]}; }
1d 1w45
2e 2dfg
3m 3df
4o 4df
Is there a better way?
Update, according to accepted answer associative array isn't the right choice if you need a strict order in for loop, better use something like this:
key=(d1 e2 m3 o4 )
val=(1w45 2dfg 3df 4df)
for i in ${!key[@]}; {
echo ${key[$i]} ${val[$i]}
}
Or this
key_val=(
"d1 1w45"
"e2 2dfg"
"m3 3df"
"o4 4df")
for item in "${key_val[@]}"; {
sub=($item)
echo ${sub[0]} ${sub[1]}
}
Or that
keys=(d1 e2 m3 o4 )
d1=1w45 e2=2dfg m3=3df o4=4df
for key in ${keys[@]}; {
echo $key ${!key}
}