Una guía para matrices Bash
Publicado: 2022-12-30En esta guía sobre arreglos Bash, aprenderá cómo declarar y trabajar con arreglos indexados y asociativos en Bash.
En Bash, puede crear matrices para almacenar una colección de elementos. Las matrices Bash son colecciones unidimensionales . En lenguajes de programación como C y C++, las matrices son colecciones de elementos del mismo tipo de datos. Sin embargo, en Bash, según el caso de uso, puede almacenar números enteros y cadenas en la misma matriz.
En este tutorial, aprenderá cómo declarar una matriz Bash y acceder a sus elementos. Luego, aprenderá cómo recorrer los elementos de una matriz y agregar elementos a una matriz. Finalmente, aprenderá sobre arreglos asociativos en Bash.
¡Vamos a empezar!
¿Interesado en codificar? Estos son los requisitos previos:
- Si está en una máquina Mac o Linux, puede abrir su terminal y codificar.
- Si está en una máquina con Windows, instale Git Bash o el Subsistema de Windows para Linux (WSL2).
Cómo declarar una matriz Bash
En esta sección, aprenderá la sintaxis para declarar una matriz Bash y ejemplos de código.
Sintaxis de la declaración de matriz Bash
Puede declarar una matriz en Bash usando 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
denota el nombre de la matriz que contiene N
elementos elt1...eltN
.
Los elementos de una matriz se encierran entre paréntesis de apertura y cierre ()
. Además, observe que los elementos de la matriz están separados por un espacio en blanco . Al igual que con cualquier variable de Bash, no debe haber espacios en blanco antes o después del operador de asignación =
.
En la mayoría de los demás lenguajes de programación, separará los elementos de una matriz o colecciones similares mediante comas. Pero en Bash, el espacio en blanco es el separador.
En Bash, las matrices en las que los elementos se identifican por su índice se denominan matriz indexada .
Declarar arreglos indexados 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 en la matriz de
prices
están separados por un espacio en blanco, entre paréntesis, sin espacios antes y después del operador de asignación =.
En Bash, puede usar el comando echo
para imprimir el valor de una variable. El uso $variableName
imprime el valor de variableName
. Sin embargo, puede ver que usar el nombre de la matriz imprime solo el primer elemento.
$ echo $prices 24
Las matrices Bash siguen la indexación cero. Entonces, el primer elemento está en el índice 0, el segundo elemento está en el índice 1, y así sucesivamente. También puede utilizar la indexación negativa; el índice del último elemento de la matriz es -1.
¿Qué sucede si intenta acceder al elemento en un índice particular e imprimirlo? Intentemos imprimir el elemento en el í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 particular, puede usar 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. Ejecutar el siguiente comando crea una matriz indexada:
$ declare -a fruits
La opción -a
crea una matriz indexada. Ahora puede completar la matriz, un elemento a la 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 usar ${fruits[@]}
.
$ echo ${fruits[@]} cherry berry apple pear melon orange
Acceda a los elementos de una matriz Bash

Puede acceder a los elementos de la matriz de las siguientes maneras:
- Recorra la matriz y acceda al elemento directamente
- Recorra el conjunto de índices y acceda a elementos en un índice específico
Bucle a través de la matriz y los elementos de acceso
Si ha codificado en Python, habrá utilizado el 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 de la matriz de prices
. Y ${prices[@]}
nos da los valores de todos los elementos.
El ciclo for de Bash es similar a la sintaxis del ciclo for de Python, pero las declaraciones en el cuerpo del ciclo deben estar encerradas dentro de do
y done
, como se muestra:
$ for price in ${prices[@]} > do > echo $price > done
Debido a que usamos el comando echo e imprimimos el valor del price
variable, obtenemos el siguiente resultado:
# output 24 27 18 30 15
Acceda a los elementos utilizando el índice de matriz
Otra forma de recorrer matrices es usar el índice de los elementos. Esto es similar a la construcción de bucle for en Python que usa la función range()
:

for i in range(len(some_list)): print(i)
Para obtener una lista de índices para recorrer, puede colocar un signo de exclamación ( !
) antes del nombre de la matriz en la expansión de parámetros. Esto le dará la lista de todos los índices válidos para la matriz, como se muestra:
$ echo ${!prices[@]} 0 1 2 3 4
La matriz de prices
contiene 5 elementos, por lo que el índice comienza en 0 y sube hasta 4.
A continuación, podemos recorrer la lista de índices y acceder al elemento en 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 operación simple de imprimir su valor. En general, podemos tener cualquier procesamiento válido sobre los elementos.
Agregar elementos a una matriz Bash

En la matriz de prices
, tenemos cinco elementos (en los índices 0,1,2,3 y 4). Si desea agregar un elemento al final de la matriz en el índice 5, puede hacerlo de la siguiente manera:
$ prices[5]=21
Vemos que se ha agregado 21 al final de la matriz de precios.
$ echo ${prices[@]} 24 27 18 30 15 21
Sin embargo, es más conveniente agregar al final de la matriz, sin recordar, el índice del último elemento agregado o la cantidad de elementos actualmente en la matriz.
Puede usar arrayName+=(elements(s))
para agregar uno o más elementos a una matriz, como se muestra:
$ prices+=(10)
Ahora, si imprimimos la matriz de prices
, vemos que se agregó 10 al final de la matriz.
$ echo ${prices[@]} 24 27 18 30 15 21 10
A continuación, aprendamos cómo 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 matriz asociativa . Puede declarar una matriz asociativa utilizando la siguiente sintaxis general. Tenga en cuenta que usamos la opción -A
en lugar de -a
.
$ declare -A fruits_prices
Puede agregar elementos a la matriz asociativa especificando la clave y el valor correspondiente. Aquí, hemos agregado 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
Entonces, ¿cómo accedemos a los elementos en una matriz asociativa?
De la misma manera que buscaría el valor usando la clave correspondiente en un diccionario de Python, puede acceder a los valores en una matriz asociativa usando las claves.
$ echo ${fruits_prices[berry]} # 27
Vemos que ${fruits_prices[@]}
se expande a los valores y ${!fruits_prices[@]}
se expande a las claves.
$ 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 agregamos. Esto se debe a que, a diferencia de las matrices indexadas, las matrices asociativas no son colecciones ordenadas. Más bien, trabajan en la asociación entre las claves y los valores. Por lo tanto, las claves son para los arreglos asociativos lo que los índices son para los arreglos indexados.
También puede 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 puede acceder a los valores.
$ for value in ${fruits_prices[@]} > do > echo $value > done
# Output 18 27 21 24 30 15
Aunque se recomienda usar arrayName[key]=value
, también puede declararlo como una secuencia como esta:
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.
Resumiendo
Espero que ahora comprenda cómo crear y trabajar con arreglos Bash. Aquí hay una revisión rápida de lo que ha aprendido.
- Puede declarar una matriz indexada en Bash usando la sintaxis
arrayName=(elt1 elt2 elt3 ... eltN)
o ejecutardeclare -a arrayName
y agregue elementos a la matriz. - Para acceder a los elementos, puede recorrer usando
${arrayName[@]}
. Como alternativa, puede obtener la lista de todos los índices válidos mediante la expansión de parámetros${!arrayName[@]}
. - Finalmente, también aprendió cómo declarar una matriz asociativa para almacenar pares clave-valor en Bash.
A continuación, consulte el tutorial de bucles en Bash.