
Los arreglos Bash son una de esas características que parecen intimidantes hasta que los usas una vez. Después de eso, te encontrarás usándolos constantemente al escribir scripts que identifican listas de valores.
¿Qué es un arreglo Bash?
Un arreglo bash es una variable que contiene múltiples valores. En lugar de declarar variables separadas para cada elemento de una lista, las pones en un arreglo y las referencias por índice o clave. Bash no se preocupa de si los elementos son cadenas o números, y no impone tipos consistentes.
Arreglos Indexados vs Arreglos Asociativos
Los arreglos indexados usan enteros como claves, comenzando desde 0. Son el valor predeterminado y se comportan como arreglos en casi todos los demás lenguajes. Los arreglos asociativos usan cadenas como claves, ofreciéndote funcionalidad de par clave-valor similar a mapas hash o diccionarios. Los arreglos asociativos requieren declaración explícita con declare -A.
Cuándo usar arreglos en scripts Bash
Usa arreglos cuando estés iterando sobre una lista de servidores, archivos, nombres de usuario o cualquier colección de elementos. Sin arreglos, terminas con múltiples variables (servidor1, servidor2, servidor3) y lógica condicional que duplica código. Con un arreglo, un bucle maneja toda la lista.
Cómo declarar un arreglo Bash
Declarando un arreglo indexado
Tres maneras de declarar un arreglo indexado:
Todo de una vez:
fruits=("apple" "banana" "cherry")Uno por uno:
fruits[0]="apple" fruits[1]="banana" fruits[2]="cherry"Usando declare:
declare -a fruits=("apple" "banana" "cherry")Declarando un arreglo asociativo
Los arreglos asociativos requieren la directiva declare -A:
declare -A servers servers[web]="192.168.1.10" servers[db]="192.168.1.20" servers[cache]="192.168.1.30"O en línea:
declare -A servers=([web]="192.168.1.10" [db]="192.168.1.20")Cómo agregar variables a un arreglo Bash
Para arreglos indexados, apéndelo usando el operador +=:
fruits+=("date" "elderberry")Asigna a un índice específico:
fruits[5]="fig"Nota: los arreglos bash son dispersos. Asignar al índice 5 cuando solo tienes 3 elementos deja los índices 3 y 4 sin asignar, no vacíos.
Referenciando e imprimiendo elementos de un arreglo
Acceder a un solo elemento
Usa la sintaxis de llaves con el índice:
echo ${fruits[0]}Para arreglos asociativos:
echo ${servers[web]}Imprimir todo el arreglo
El símbolo @ expande todos los elementos:
echo ${fruits[@]}Para ver todas las claves:
echo ${!fruits[@]}Obtener la longitud del arreglo
Prefija con # para obtener la longitud del arreglo bash:
echo ${#fruits[@]}Para obtener la longitud de cadena de un elemento específico:
echo ${#fruits[0]}Cómo eliminar elementos de un arreglo Bash
Usa unset para eliminar un elemento específico:
unset fruits[1]Esto elimina el elemento pero deja el hueco del índice. La longitud del arreglo disminuye en uno. Para eliminar todo el arreglo:
unset fruitsCómo recorrer un arreglo Bash
Bucle con For-In
La forma estándar de iterar sobre los valores del arreglo:
for fruit in "${fruits[@]}"; do echo "$fruit" doneLas comillas alrededor de ${fruits[@]} manejan correctamente los elementos con espacios. Sin ellas, un elemento como ‘fruta de la pasión’ se divide en dos.
Bucle con índice
Cuando necesitas el índice junto con el valor:
for i in "${!fruits[@]}"; do echo "Index $i: ${fruits[$i]}" doneEl prefijo ! expande los índices del arreglo en lugar de sus valores.
Pasando un arreglo Bash a una función
Bash no pasa arreglos a funciones de forma nativa. La solución alternativa: pasa el nombre del arreglo y usa expansión indirecta dentro de la función:
function process_array { local -n arr=$1 for item in "${arr[@]}"; do echo "Processing: $item" done } my_list=("file1" "file2" "file3") process_array my_listEl flag -n en local crea una referencia de nombre. La función opera sobre el arreglo original sin copiarlo.
FAQ: Arreglo Bash
Para un arreglo indexado: fruits=(«manzana» «plátano» «cereza») Para un arreglo asociativo: declare -A servers=([web]=»192.168.1.10″ [db]=»192.168.1.20″)
Usa for-in: for item in «${array[@]}»; do echo «$item»; done. Siempre coloca comillas en «${array[@]}» para identificar elementos que contienen espacios.
Usa ${#array[@]}. Ejemplo: count=${#fruits[@]}. Esto da el número de elementos en el arreglo.
Un arreglo asociativo usa claves de cadena en lugar de índices enteros. Decláralo con declare -A: declare -A config=([host]=»localhost» [port]=»3306″). Accede a los valores con ${config[host]}.