bash bug bigger than heartbleed showcase image 6 a 7359

Muchas veces en nuestros programas necesitamos dividir una cadena en un array para procesarlo, en la mayoria de los lenguajes de programacion es una tarea sumamente sencilla pero si utilizamos bash quizas pueda ser una tarea un poco mas complicada, por esa razón dejo una muestra de como podria hacerse en este lenguaje.

 

Imaginemos que tenemos la siguiente linea de texto

"Paris,France,Europe"

y queremos una salida tipo

array[0] = Paris array[1] = France array[2] = Europe

Lo que debemos hacer es lo siguiente:

IFS=', ' read -a array <<< "$string"

Para acceder al primer elemento

echo "${array[0]}"

Para iterar dentro de los elementos

for element in "${array[@]}" do     echo "$element" done

Para obtener el indice y el valor

for index in "${!array[@]}" do     echo "$index ${array[index]}" done

El ultimo ejemplo es util por que los arreglos en bash son esparcidos, en otras palabras puedes borrar un elemento o añadir un elemento y los indices no seran contiguos.

unset "array[1]" array[42]=Earth

Para obtener el numero de elementos del array

echo "${#array[@]}"

Como mencione antes los arreglos pueden ser esparcidos, por lo que no deberias usar la longuitud para obtener el ultimo elemento. Aqui te muestro como deberias hacer para esta tarea (a partir de la version 4.2 o superior)

echo "${array[-1]}"

En cualquier version (a partir de la 2.05b)

echo "$array[@]: -1:1}