En esta guía sobre arrays en Bash, aprenderás a declarar y trabajar con arrays indexados y asociativos en Bash.
En Bash, puedes crear arrays para almacenar una colección de elementos. Los arrays de Bash son unidimensional colecciones. En lenguajes de programación como C y C++, las matrices son colecciones de elementos del mismo tipo de datos. Sin embargo, en Bash, dependiendo del caso de uso, puedes almacenar enteros y cadenas en el mismo array.
En este tutorial, aprenderás a declarar un array Bash y a acceder a sus elementos. Luego aprenderás a recorrer los elementos de un arreglo y a agregar elementos a un arreglo. Finalmente, aprenderás sobre arrays asociativos en Bash.
¡Comencemos!
⚙ ¿Le interesa participar? Estos son los requisitos previos:
- Si estás en un Mac o en una máquina Linux, puedes abrir tu terminal y codificar.
- Si utiliza una máquina Windows, instale Git Bash o el Subsistema Windows para Linux (WSL2).
Cómo declarar una matriz Bash
En esta sección, aprenderás la sintaxis para declarar un array Bash y ejemplos de código.
Sintaxis de la declaración de matrices en Bash
Puedes declarar un array en Bash utilizando la siguiente sintaxis:
$ arrayName=(elt1 elt2 ... eltN)
# arrayName is the name of the array
# elt1 through eltN are the N elements in the array
En la sintaxis anterior, arrayName
indica el nombre de la matriz que contiene N
elementos elt1...eltN
.
Los elementos de una matriz se encierran entre los paréntesis de apertura y cierre ()
. Obsérvese también que los elementos de la matriz están separados por un espacio en blanco. Como con cualquier variable Bash, debe haber no espacio en blanco antes o después del operador de asignación =
.
📑 En la mayoría de los lenguajes de programación, los elementos de un array o colecciones similares se separan mediante comas. Pero en Bash, el espacio en blanco es el separador.
En Bash, estas matrices en las que los elementos se identifican por su índice se denominan matriz indexada.
Declaración de matrices indexadas en Bash
Vamos a crear prices
una matriz de números.
$ prices=(24 27 18 30 15)
Como se menciona en la sintaxis, los números del
prices
están separados por un espacio en blanco, encerrados entre paréntesis, sin espacios antes y después del operador de asignación =.
En Bash, puede utilizar la función echo
para imprimir el valor de una variable. Uso de $variableName
imprime el valor de variableName
. Sin embargo, puedes ver que utilizando el nombre del array sólo se imprime el primer elemento.
$ echo $prices
24
Las matrices Bash siguen la indexación cero. Así, el primer elemento está en el índice 0, el segundo en el 1, y así sucesivamente. También puedes usar indexación negativa; el índice del último elemento del array es -1.
¿Qué ocurre si intentas acceder al elemento de un índice concreto e imprimirlo? Intentemos imprimir el elemento del índice 1.
$ echo $prices[1]
24[1]
¿Por qué la salida es 24[1]? 🤔 Esto se debe a que Bash sustituye $prices
con 24, el primer elemento de la matriz y [1] se imprime como tal.
Para imprimir el elemento en un índice determinado, puede utilizar la expansión de parámetros de la forma ${prices[index]}
.
$ echo ${prices[1]}
# 27
$ echo ${prices[2]}
# 18
Para imprimir todos los elementos de la matriz, puede especificar @
en lugar de un índice específico.
$ echo ${prices[@]}
24 27 18 30 15
A continuación, vamos a crear una matriz de cadenas. Ejecutando el siguiente comando se crea un array indexado:
$ declare -a fruits
La opción -a
crea una matriz indexada. Ahora puede rellenar la matriz, un elemento cada vez, declarando el elemento en un índice específico, como se muestra a continuación:
$ fruits[0]="cherry"
$ fruits[1]="berry"
$ fruits[2]="apple"
$ fruits[3]="pear"
$ fruits[4]="melon"
$ fruits[5]="orange"
Ahora, para imprimir todos los elementos de la matriz, puede utilizar ${fruits[@]}
.
$ echo ${fruits[@]}
cherry berry apple pear melon orange
Acceso a los elementos de una matriz Bash

Puedes acceder a los elementos del array de las siguientes maneras:
- Recorrer la matriz y acceder directamente al elemento
- Recorrer el conjunto de índices y acceder a los elementos de un índice específico
Recorrer la matriz y acceder a los elementos
Si has programado en Python, habrás utilizado la función bucle for utilizando la siguiente sintaxis:
for elt in some_list:
print(elt)
Ahora escribamos el equivalente en Bash del bucle for anterior.
Sabemos que {prices[@]}
se expande a todos los elementos del prices
matriz. Y ${prices[@]}
nos da los valores de todos los elementos.
El bucle for de Bash es similar a la sintaxis del bucle for de Python, pero las sentencias en el cuerpo del bucle deben estar encerradas dentro de do
y done
como se muestra:
$ for price in ${prices[@]}
> do
> echo $price
> done
Porque usamos el comando echo e imprimimos el valor de la variable price
obtenemos el siguiente resultado:
# output
24
27
18
30
15
Acceso a los elementos mediante el índice de la matriz
Otra forma de recorrer arrays es utilizando el índice de los elementos. Esto es similar a la construcción de bucle for en Python es el uso de la range()
función:
for i in range(len(some_list)):
print(i)
Para obtener una lista de índices que recorrer en bucle, puede colocar un signo de exclamación (!
) antes del nombre del array en la expansión de parámetros. Esto le dará la lista de todos índices válidos para la matriz, como se muestra:
$ echo ${!prices[@]}
0 1 2 3 4
En prices
contiene 5 elementos, por lo que el índice empieza en 0 y llega hasta 4.
A continuación, podemos recorrer la lista de índices y acceder al elemento de cada índice. Para el índice i
, ${prices[i]}
es el elemento en el índice i
.
$ for i in ${!prices[@]}
> do
> echo ${prices[i]}
> done
El bucle anterior imprime todos los elementos de la matriz.
# output
24
27
18
30
15
💬 Aquí, después de acceder a cada elemento, realizamos una simple operación de impresión de su valor. En general, podemos tener cualquier tratamiento válido en los elementos.
Añadir elementos a una matriz Bash

En el prices
tenemos cinco elementos (en los índices 0,1,2,3 y 4). Si quieres añadir un elemento al final de la matriz en el índice 5, puedes hacerlo de la siguiente manera:
$ prices[5]=21
Vemos que se ha añadido 21 al final de la matriz de precios.
$ echo ${prices[@]}
24 27 18 30 15 21
Sin embargo, es más cómodo añadir al final de la matriz -sin recordar- el índice del último elemento añadido o el número de elementos que hay actualmente en la matriz.
Puede utilizar arrayName+=(elements(s))
para añadir uno o más elementos a una matriz, como se muestra:
$ prices+=(10)
Ahora, si imprimimos el prices
vemos que se ha añadido 10 al final de la matriz.
$ echo ${prices[@]}
24 27 18 30 15 21 10
A continuación, vamos a aprender a declarar matrices asociativas en Bash.
Matrices asociativas en Bash
Si desea definir una relación en términos de pares clave-valor, puede utilizar una directiva matriz asociativa. Puedes declarar un array asociativo utilizando la siguiente sintaxis general. Observe que utilizamos el carácter -A
en lugar de -a
.
$ declare -A fruits_prices
Puede añadir elementos a la matriz asociativa especificando la clave y el valor correspondiente. En este caso, hemos añadido los nombres de las frutas como claves y los números de la matriz de precios como valores.
$ fruits_prices[cherry]=24
$ fruits_prices[berry]=27
$ fruits_prices[apple]=18
$ fruits_prices[pear]=30
$ fruits_prices[melon]=15
$ fruits_prices[orange]=21
¿Cómo se accede a los elementos de una matriz asociativa?
Del mismo modo que en un diccionario de Python se busca el valor mediante la clave correspondiente, en una matriz asociativa se puede acceder a los valores mediante las claves.
$ echo ${fruits_prices[berry]}
# 27
Vemos que ${fruits_prices[@]}
se expande a los valores y ${!fruits_prices[@]}
se expande hacia las teclas.
$ echo ${fruits_prices[@]}
# Output: 18 27 21 24 30 15
$ echo ${!fruits_prices[@]}
# Output: apple berry orange cherry pear melon
Nota: El orden de los elementos no es el mismo que el orden en que los hemos añadido. Esto se debe a que, a diferencia de las matrices indexadas, las matrices asociativas no son colecciones ordenadas. Funcionan por asociación entre las claves y los valores. Por tanto, las claves son a las matrices asociativas lo que los índices son a las matrices indexadas.
También puedes recorrer la matriz asociativa y acceder a las claves, como se muestra:
$ for key in ${!fruits_prices[@]}
> do
> echo $key
> done
# Output
apple
berry
orange
cherry
pear
melon
El siguiente bucle muestra cómo se puede acceder a los valores.
$ for value in ${fruits_prices[@]}
> do
> echo $value
> done
# Output
18
27
21
24
30
15
Aunque se recomienda utilizar arrayName[key]=value
también puede declararlo como una secuencia de la siguiente manera:
declare -A arrayName
arrayName=(key1 value1 key2 value2 ... keyN valueN)
De esta forma, Bash infiere el primer elemento como la primera clave, el segundo elemento como el primer valor, y así sucesivamente.
Resumen
Espero que ahora entiendas cómo crear y trabajar con arrays Bash. He aquí un rápido repaso de lo que has aprendido.
- Puede declarar una matriz indexada en Bash utilizando la sintaxis
arrayName=(elt1 elt2 elt3 ... eltN)
o correrdeclare -a arrayName
y añadir elementos a la matriz. - Para acceder a los elementos, puede hacer un bucle utilizando
${arrayName[@]}
. Alternativamente, puede obtener la lista de todos los índices válidos utilizando la expansión de parámetros${!arrayName[@]}
. - Por último, también has aprendido a declarar un array asociativo para almacenar pares clave-valor en Bash.
A continuación, consulte el tutorial bucles for en Bash.