¿Cómo paso la matriz asociativa como un argumento con los elementos de esa matriz que se pasan en un orden específico?

# Aquí está mi código

foo () {

k = $ 1 && shift

para ((i = 0; i <$ k; i ++)); hacer

para ((j = 0; j <$ k; j ++)); hacer

matriz [$ i, $ j] = $ 1 && shift

printf “% s \ t” $ {array [$ i, $ j]}

hecho

printf “\ n”

hecho

}

declarar -Una matriz

k = 2

a = 1

para ((i = 0; i <$ k; i ++)); hacer

para ((j = 0; j <$ k; j ++)); hacer

matriz [$ i, $ j] = $ a

a = $ (($ a + 1))

printf “% s \ t” $ {array [$ i, $ j]}

hecho

printf “\ n”

hecho

foo $ k $ {array [@]}

la salida es

#out de la función foo

1 2

3 4

#in function foo

1 2

4 3

¿Por qué se cambia el orden? ¿y cómo podría hacer que el orden de la matriz en la función sea igual a la matriz que se está pasando?