Introducción a los Arreglos
Los arreglos en Bash permiten almacenar múltiples valores en una sola variable. Bash únicamente soporta arreglos unidimensionales, no multidimensionales. Similar a otros lenguajes, los elementos se indexan desde cero, y se definen usando paréntesis con valores separados por espacios.
Métodos para Definir Arreglos
Asignación Directa
datos=("manzana" "banana" "cereza" "dátil")
Usando Índices Específicos
colores=([0]="rojo" [1]="azul" [2]="verde")
A Partir de una Lista
lista="uno dos tres cuatro"
numeros=($lista)
Asignación Indivdiual por Índice
edades[0]=25
edades[1]=30
edades[2]=35
Consultar Arreglos y Cantidad de Elementos
echo ${datos[*]} # Muestra todos los elementos
echo ${datos[@]} # Alternativa para mostrar elementos
echo ${#datos[@]} # Cuenta el número total de elementos
Tipos de Datos en Arreglos
Los arreglos pueden contener tanto valores numéricos como cadenas de texto. Para cadenas con espacios, se requiere el uso de comillas dobles o simples durante la definición.
Ejemplo Práctico
nombres=("Juan Pérez" "María García" "Luis Martínez")
echo ${#nombres[@]} # Resultado: 3
nombres=("Ana" "Bob" "Carlos")
echo ${#nombres[@]} # Resultado: 3, ya que se redefine con elementos individuales
Obtener la Longitud del Arreglo
Para determinar cuántos elementos tiene un arreglo, se utiliza el operador #.
mi_arreglo=(10 20 30)
echo ${#mi_arreglo[@]} # Salida: 3
Listar Todos los Elementos
Se puede acceder a todos los valores del arreglo usando asterisco o arroba.
valores=("A" "B" "C" "D")
echo ${valores[*]} # Muestra: A B C D
echo ${valores[@]} # Muestra: A B C D
Acceder a Elementos por Índice
Para recuperar un valor específico, se usa el índice entre corchetes.
precios=([0]=100 [1]=200 [2]=300)
echo ${precios[1]} # Salida: 200
Recorrer un Arreglo con Bucles
Los bucles for permiten iterar sobre cada elemento. Nota la diferencia al usar comillas alrededor de la expansión del arreglo.
elementos=("X" "Y" "Z")
for item in ${elementos[*]}; do
echo $item
done
# Salida: X, Y, Z en líneas separadas
for item in "${elementos[@]}"; do
echo $item
done
# Similar comportamiento, pero maneja espacios en elementos
for item in "${elementos[*]}"; do
echo $item
done
# Salida: X Y Z en una sola línea
Extraer Subconjuntos de Arreglos
Se pueden obtener porciones de un arreglo usando la sintaxis de corte: ${arreglo[@]:inicio:cantidad}.
secuencia=(5 10 15 20 25 30)
echo ${secuencia[@]:2:3} # Muestra elementos desde índice 2, cantidad 3: 15 20 25
echo ${secuencia[@]:3} # Muestra desde índice 3 hasta el final: 20 25 30
Reemplazar Elementos
Reemplazo Global
Para cambiar todas las ocurrencias de un valor, se usa la expansión de reemplazo.
valores_originales=(1 2 3 2 5)
valores_modificados=(${valores_originales[@]/2/100})
echo ${valores_modificados[@]} # Salida: 1 100 3 100 5
# Nota: El arreglo original no se modifica directamente
Reemplazo Individual
Para cambiar un solo elemetno, se asigna un nuevo valor usando su índice.
lista=(10 20 30 40)
lista[2]=99
echo ${lista[@]} # Salida: 10 20 99 40
Eliminar Arreglos o Elementos
El comando unset se utiliza para borrar completamente un arreglo o elementos específicos.
conjunto=("A" "B" "C" "D")
unset conjunto[1] # Elimina el elemento en índice 1
echo ${conjunto[@]} # Salida: A C D
# Para eliminar todo el arreglo:
# unset conjunto
Añadir Nuevos Elementos
Mediante Asignación por Índice
arreglo=(1 2 3)
arreglo[3]=4
echo ${arreglo[@]} # Salida: 1 2 3 4
Usando la Longitud Actual como Índice
Este método puede fallar si los índices no son consecutivos.
datos=("a" "b")
datos[${#datos[@]}]="c"
echo ${datos[@]} # Salida: a b c
Reasignación con Todos los Elementos
Se debe usar comillas dobles para preservar elementos con espacios.
original=(1 2 3)
original=("${original[@]}" 4 5)
echo ${original[@]} # Salida: 1 2 3 4 5
Operador += para Adición Rápida
frutas=("manzana" "banana")
frutas+=("cereza" "dátil")
echo ${frutas[@]} # Salida: manzana banana cereza dátil