Arrays en Shell Script

A la hora de programar, muchas veces nos encontramos con que tenemos que agrupar objetos de un mismo tipo, bien porque tengamos un listado previamente o bien porque, a medida que se está ejecutando nuestra aplicación se van acumulando esos objetos. Una forma de agrupar esos objetos son los arrays.

Definir un array

En shell script podemos definir un array dejando un espacio en blanco entre esos elementos y agrupándolos entre paréntesis:

colors=(rojo verde amarillo azul blanco negro)

En caso de tener algún elemento con espacio entre dos o más palabras, podemos indicarlo escapando el espacio con una barra:

colors=(rojo verde amarillo azul blanco negro verde\ botella)

Mostrar el contenido de un array

Una vez definido el array, para trabajar con él, además de usar el símbolo de dólar como con cualquier otra variable, accederemos el nombre del array entre llaves. Con [@] indicaremos el conjunto completo.

echo ${colors[@]}

Número de elementos de un array

Podemos saber el número de elementos con el operador numeral o almohadilla (#) antes del nombre del array y entre corchetes, una arroba para indicar el conjunto de elementos:

echo ${#colors[@]}

Recorrer los elementos de un array

Para poder recorrer un array, usaremos también el conjunto completo:

#!/bin/bash

colors=(rojo verde amarillo azul blanco negro)

for color in "${colors[@]}"
do
    echo $color
done

Acceder a elementos concretos

Si, en lugar del conjunto completo, queremos acceder a unos elementos concretos, rebanaremos (slice) como si trabajásemos con una cadena de texto. Si queremos extraer 2 elementos desde la posición 3, escribiremos:

#!/bin/bash

colors_array=(rojo verde amarillo azul blanco negro)

colors=${colors_array[@]:3:2}
echo $colors

Que nos devolverá:

azul blanco

Añadir elementos

Para añadir elementos a un array, podemos hacerlo al principio:

#!/bin/bash

colors=(rojo verde amarillo azul blanco negro)

colors=(cyan ${colors[@]})
echo ${colors[@]}

Que devuelve:

azul blanco

Al final:

#!/bin/bash

colors=(rojo verde amarillo azul blanco negro)

colors=(${colors[@]} cyan)
echo ${colors[@]}

Que devuelve:

rojo verde amarillo azul blanco negro cyan

O en una posición concreta:

#!/bin/bash

colors=(rojo verde amarillo azul blanco negro)

colors=(${colors[@]:0:4} cyan ${colors[@]:5})
echo ${colors[@]}

Que devuelve:

rojo verde amarillo azul cyan negro

Deja una respuesta

Tu dirección de correo electrónico no será publicada.