Manejo de Arreglos
Tipos de arreglos implementados en Bash
Bash puede manejar arreglos unidimensionales indexados y asociativos. Cualquier variable puede ser usado como un arreglo indexado y no hay un límite máximo en su tamaño. Un elemento de un arreglo indexado puede ser referenciado usando un número entero (índice) y su primer elemento está en la posición cero (0).
Un arreglo asociativo es una estructura de datos para almacenar pares de tipo clave-valor. Cada clave es única y tiene asociado un valor.
Operaciones con arreglos indexados
En la siguiente tabla se resumen las operaciones que se pueden hacer con los arreglos indexados:
Sintaxis | Resultado |
---|---|
declare -a nombre | Declarar explicitamente un arreglo indexado |
arr=() | Crear un arreglo vacío |
arr=(1 2 3) | Inicializar un arreglo indexado |
${arr | Obtener el tercer elemento del arreglo |
${arr[@]} | Obtener todos los elementos del arreglo |
${!arr[@]} | Obtener todos los índices del arreglo |
${#arr[@]} | Obtener el número de elementos del arreglo |
arr | Sobreescribir el valor del segundo elemento del arreglo |
arr+=(4) | Agregar un elemento en un arreglo indexado |
${arr[@]:s:n} | Obtener n elementos comenzando en el indice s |
unset arr | Eliminar un arreglo |
unset arr | Borrar el segundo elemento de un arreglo indexado |
Ejemplos con arreglos indexados
Recorrer un arreglo
#! /usr/bin/bash
# Crear e inicializar el arreglo
a=(uno dos 3)
# Recorrer el arreglo
for i in ${!a[@]}; do
echo "a[$i] = ${a[$i]}"
done
Salida:
a[0] = uno
a[1] = dos
a[2] = 3
Ordenar un arreglo numérico
#!/bin/bash
arreglo=(4 14 8 32 66 12 2 90)
ordenado=($(IFS=$'\n'; echo "${arreglo[*]}" | sort -n))
echo ${ordenado[*]}
Salida:
2 4 8 12 14 32 66 90
Ordenar un arreglo alfanumérico
#!/bin/bash
arreglo=('manzana' 4 14 8 'banano' 32 66 12 2 90)
ordenado=($(IFS=$'\n'; echo "${arreglo[*]}" | sort -n)))
echo ${ordenado[*]}
Salida:
banano manzana 2 4 8 12 14 32 66 90
Operaciones con arreglos asociativos
En la siguiente tabla se resumen las operaciones que se pueden hacer con los arreglos asociativos
Sintaxis | Resultado |
---|---|
declare -A nombre | Declarar explicitamente un arreglo asociativo |
arr=([clave1]=valor1 [clave2]=valor2 ...) | Inicializar un arreglo asociativo |
arr[clave1]=value1 | Agregar un valor en un arreglo asociativo |
${arr[@]} | Obtener todos los valores del arreglo |
${!arr[@]} | Obtener todas las claves del arreglo |
${#arr[@]} | Obtener el número de elementos del arreglo |
${arr | Obtener el valor asociado a una clave del arreglo |
unset arr[clave1] | Eliminar un elemento del arreglo |
unset arr | Borrar un arreglo asociativo |
Ejemplos con arreglos asociativos
Recorrer un arreglo asociativo
#! /usr/bin/bash
# Declarar e inicializar el arreglo
declare -A arreglo
arreglo=([uno]=1 [dos]=2 [tres]=3)
#Recorrer el arreglo
for clave in ${!arreglo[@]}; do
echo "${clave} = ${arreglo[${clave}]}"
done
Salida:
dos = 2
uno = 1
tres = 3
Verificar si existe una clave
#!/bin/bash
#Declarar e inicializar el arreglo
declare -A arreglo
arreglo=([uno]=1 [dos]=2 [tres]=3)
#Verificar si la clave 'cinco' existe
if [[ -n "${arreglo[cinco]}" ]]; then
echo "Existe"
else
echo "No existe"
fi
Salida:
No existe