Arrays
Una buena referencia.
Los arrays se generan con paréntesis: array=(uno dos tres)
. Al igual que en otros lenguajes, se indexan desde 0
. Para evocar un elemento del array hay que utilizar los corchetes:
$ people=("Anna" "Bob" "Charlie")
$ echo ${people[1]}
Bob
Los índices no tienen por qué ser números:
array=([padre]="Pedro" [madre]="Mich")
Se pueden imprimir todos los elementos del array con ${array[*]}
, y el número de elementos en el array con ${#array[@]}
:
$ echo ${people[*]}
Anna Bob Charlie
$ echo ${#people[@]}
3
$ echo ${#people[*]}
3
$ echo ${people[${#people[@]}-1]}
Charlie
$ echo ${people[2]}
Charlie
Se pueden añadir elementos indicando el índice
$ people[3]="Debbie"
$ echo ${people[*]}
Anna Bob Charlie Debbie
y por tanto asegurándonos de meterlo siempre en el último elemento:
$ people[${#people[@]}]="Ellen"
$ echo ${people[*]}
Anna Bob Charlie Debbie Ellen
En este último ejemplo, ${#array[@]}
devuelve la longitud del array; como el índice es la longitud menos uno, sería el último índice disponible.
Otra forma de añadir un elemento en la última posición es utilizar +=
:
$ people+=("Frank")
$ echo ${people[@]}
Anna Bob Charlie Debbie Ellen Frank
Además es posible especificar los índices directamente al declarar el array:
$ newpeople=([1]="Barry" [2]="Chris" [0]="Allan")
$ echo ${newpeople[@]}
Allan Barry Chris
Copiar un array
Copiar un array requiere especificar que la variable destino es un array y asegurarse de que se transfieren todos los elementos del mismo. La forma correcta es
newArray=(${oldArray[@]})
Todas las demás formas no son eficaces:
$ a=("Zero" "One" "Two")
$ b=$a
$ echo $b
Zero
$ echo ${b[1]}
$ c=${a[@]}
$ echo ${c}
Zero One Two
$ echo ${c[1]}
$ d=(${a[@]})
$ echo ${d}
Zero
$ echo ${d[1]}
One
Extraer el índice
Para sacar el número de índices, se puede utilizar !
:
$ array=("perro" "gato" "conejo" "ratón")
$ echo ${!array[@]}
0 1 2 3
Esto es útil para construir loops en los que quieras extraer el índice de un elemento dentro de un array:
for item in ${array[@]} ; do
echo ${item}
done
Crear un array a partir de un string separado por espacios
Mientras se uitilicen los paréntesis para definir un array, es posible utilizar el input de una variable separada por espacios o nuevas líneas:
$ palos="Oros Bastos Espadas Copas"
$ echo $palos
Oros Bastos Espadas Copas
$ palos_array=($palos)
$ echo ${palos_array[2]}
Espadas
Eliminar elementos
Para eliminar un elemento se utiliza unset
y se especifica el índice a eliminar
$ unset ${people[1]}
$ echo ${people[@]}
Anna Charlie Debbie Ellen Frank