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