Arrays en Bash: Definición y Manipulación

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

Etiquetas: bash shell scripting Arrays linux scripting

Publicado el 6-14 05:27