2 votos

bash for loop con array desconocido

Necesito ejecutar un bucle for sobre los elementos de la matriz edg_cdi, pero sé que es esa matriz solo porque mi parámetro de entrada fue elegido = 'cdi'. Si se eligió = 'cdt' (o muchos otros), la matriz seleccionada sería diferente.

 chosen='cdi'

edg_cdi=('40' '46' '37' '43')
edg_cdt=('69' '24' '177' '25')

string='edg_'
wholename=$string$chosen

for i in "${ WHAT_TO_WRITE_HERE [@]}"
do
  echo $i
done
 

La salida deseada es de cuatro ecos:

 40
46
37
43
 

2voto

rwc9u Puntos 532

Puede usar el direccionamiento de variables con una matriz adecuada (a diferencia de la respuesta de @ user1330614, que falsifica una matriz con una variable simple). Lo complicado es que debe incluir el elemento de la matriz (o [@] para todos los elementos) en la variable que está dirigiendo. Me gusta esto:

 edg_cdi=('40' '46' '37' '43')
wholename="edg_cdi"             # Same value original code generates
wholearray="${wholename}[@]"    # This includes the array name AND "[@]"
for i in "${!wholearray}"; do
    #...etc
 

Para obtener, por ejemplo, el elemento n 'n de la matriz, podría usar algo como:

 n=3    # The element number we want
wholename_n="${wholename}[n]"    # Note that n does not have a $; it won't be resolved until use
dosomethingwith "${!wholename_n}"    # this resolves n and gets the 3rd element
n=2
dosomethingwith "${!wholename_n}"    # this re-resolves n and gets the 2nd element
 

1voto

user1330614 Puntos 133

Tu código debería verse así

 chosen='cdi'

edg_cdi="40 46 37 43"
edg_cdt="69 24 177 25"

string='edg_'
wholename=$string$chosen

for i in ${!wholename}
do
  echo $i
done
 

Como se explica aquí

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: