Como la mayoría de los lenguajes de programación, los scripts de bash a veces necesitan lidiar con una lista de valores relacionados. La forma más simple es la matriz estándar.
En bash, la programación de arreglos es bastante diferente, en particular cuando se trata de sintaxis. Las matrices Bash también son estrictamente unidimensionales, pero aún tienen muchos usos.
La sintaxis básica de las matrices Bash
Crear una matriz en bash es sencillo. Puede inicializar una matriz completa usando corchetes, por ejemplo:
city=(Londres París Milán "Nueva York")
(Puede encontrar todo el código de este ejemplo de ciudad en esta esencia de GitHub.)
Esto crea una matriz que contiene cuatro elementos, indexados de 0 a 3. Tenga en cuenta que el cuarto valor es una cadena entrecomillada que consta de dos palabras. Deberá citar valores que contengan espacios para aclarar que no son valores separados.
Puede acceder a un solo elemento usando la sintaxis de paréntesis que es común en todos los lenguajes de programación:
ciudad[2]
Dado que esto es bash, necesitará un par de ajustes para usar el valor en una expresión:
- Deberá anteponer el signo de dólar ($) al nombre de la variable.
- También necesitará usar llaves ({}) para que el nombre de la variable no sea ambiguo. Por defecto, bash tratará $ciudad[2] como una variable denominada ciudad. Agregue llaves para decirle a bash que evalúe los corchetes y el número de índice también.
La sintaxis estándar de acceso a la matriz bash es entonces:
${nombre_variable[índice]}
Aquí hay un ejemplo completo:
#!/bin/bash
city=(Londres París Milán "Nueva York")
echo ${ciudad[3]}
# Nueva York
En lugar de inicializar una matriz de una sola vez, puede asignarla paso a paso. Este script es un equivalente más largo del ejemplo anterior:
#!/bin/bash
ciudad[0]=Londres
ciudad[1]=París
ciudad[2]=Milán
ciudad[3]="Nueva York"
echo ${ciudad[3]}
# Nueva York
Tenga en cuenta que, en cualquier caso, debe tener cuidado de no agregar ningún espacio alrededor del signo igual. “city[0] = London”, con espacios alrededor del signo igual, generará un error.
Más usos para arreglos Bash
Las matrices son perfectas para almacenar datos relacionados. Aquí hay un script de shell (muy limitado) para obtener la raíz cuadrada de un número:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
echo ${raíz cuadrada[$1]}
Tenga en cuenta que el script usa el valor $1 como el índice de la matriz. $1 representa el primer argumento de la línea de comandos que recibe el script, por lo que puede ejecutar este script de la siguiente manera:
$ ./sqrt.sh 9
3
Usted puede ser consciente de la $(cmd) sintaxis para ejecutar un comando y guardar su salida en una variable. Puede combinar esto con la sintaxis de inicialización de matriz para obtener una matriz de archivos con los que trabajar:
arr=( $(ls) )
una matriz es a menudo una estructura de datos perfecta para iterar y Bash no es una excepción. Puede recorrer una matriz para imprimir cada elemento o realizar una operación en cada miembro.
Puede abordar una matriz en un por.. en círculo, para iterar sobre su contenido. Por ejemplo, aquí hay un bucle simple que imprime el número de líneas en cada archivo de la matriz Arr:
para archivo en "${arr[@]}"; hacer
wc -l "$archivo"
hecho
# 3 envvars
# 547 httpd.conf
# ...
Tenga en cuenta que este patrón hace uso de la @ símbolo para recuperar todos los elementos de la matriz.
Más sintaxis de matriz Bash
Puede obtener la cantidad de elementos en una matriz usando lo siguiente:
echo ${#ciudad[@]}
# 4
Puede agregar un nuevo elemento al final de una matriz estándar de esta manera:
matriz+=(4)
Entonces, para agregar una quinta ciudad a la lista:
ciudad+=(Roma)
echo ${ciudad[@]}
# Londres París Milán Nueva York Roma
Para extraer una porción de una matriz, puede usar una sintaxis que se aproxima a la operación de división de muchos otros lenguajes:
${matriz[@]:s: n}
Esta sintaxis devolverá una porción de la matriz que comienza en la posición s y que contiene norte artículos. Puede omitir el :norte parte para extraer todos los elementos de s hasta el final de la lista.
echo ${ciudad[@]:2:2}
# Milán Nueva York
echo ${ciudad[@]:3}
# Nueva York Roma
Bash tiene muchas características, solo requieren un poco de aprendizaje
Las matrices en bash pueden tener limitaciones, pero ofrecen la misma funcionalidad básica que la mayoría de los lenguajes de programación. Aunque bash ha soportado históricamente matrices unidimensionales sencillas, los tiempos están cambiando. La última versión de bash, 4, admite matrices asociativas e indexación de matrices negativas.
Independientemente de la versión de bash que esté utilizando, es importante comprender sus matices. Incluso la sintaxis de variables normal tiene muchas idiosincrasias.
Explicación de las variables de Bash: una guía sencilla con ejemplos
Leer siguiente
Temas relacionados
- Programación
- linux
- Programación
- Consola Bash de Linux
- secuencias de comandos
Sobre el Autor

Bobby es un entusiasta de la tecnología que trabajó como desarrollador de software durante casi dos décadas. En MUO, es el Editor Junior de la sección de Programación. Es un apasionado de los juegos, trabaja como editor en jefe en la revista Switch Player y está inmerso en todos los aspectos de la publicación en línea y el desarrollo web.
Suscríbete a nuestro boletín
¡Únase a nuestro boletín para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!
Haga clic aquí para suscribirse