Bash Shell Script Iterate a través de valores de matriz

Tener una matriz de variables no sirve de nada a menos que pueda usar esos valores de alguna manera. Esta receta tecnológica muestra algunos métodos para recorrer en bucle los valores de una matriz en el shell bash.


Tomemos, por ejemplo, la siguiente definición de matriz:

nombres = (Jennifer Tonya Anna Sadie)

La siguiente expresión se evalúa en todos los valores de la matriz:

$ {nombres [@]}

También se puede utilizar en cualquier lugar donde se pueda usar una variable o una cadena.

Un simple bucle for puede iterar a través de esta matriz un valor a la vez:

para nombre en $ {nombres [@]}
hacer
echo $ nombre
# otras cosas en $ nombre
hecho

Esta secuencia de comandos recorrerá los valores de la matriz y los imprimirá, uno por línea. Se pueden colocar declaraciones adicionales dentro del cuerpo del bucle para realizar acciones adicionales, como modificar cada archivo en una matriz de nombres de archivos.

A veces es útil recorrer una matriz y conocer el índice numérico de la matriz que está utilizando (por ejemplo, para que pueda hacer referencia a otra matriz con el mismo índice). El mismo bucle en el ejemplo anterior también se puede lograr de esta manera:

para ((i = 0; i <$ {# nombres [@]}; i ++)) echo echo $ {names [$ i]} # yadda yadda done

En este ejemplo, el valor $ {# nombres [@]} se evalúa en el número de elementos de la matriz (4 en este caso). Se accede a los elementos individuales de la matriz, uno a la vez, utilizando el índice entero $ i como $ {nombres [$ i]}