una - recorrer array bash
Agregue un nuevo elemento a una matriz sin especificar el índice en Bash (5)
Como señala Dumb Guy , es importante tener en cuenta si la matriz comienza en cero y es secuencial. Dado que puede realizar asignaciones y anular índices no contiguos, ${#array[@]}
no siempre es el siguiente elemento al final de la matriz.
$ array=(a b c d e f g h)
$ array[42]="i"
$ unset array[2]
$ unset array[3]
$ declare -p array # dump the array so we can see what it contains
declare -a array=''([0]="a" [1]="b" [4]="e" [5]="f" [6]="g" [7]="h" [42]="i")''
$ echo ${#array[@]}
7
$ echo ${array[${#array[@]}]}
h
Aquí es cómo obtener el último índice:
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
Eso ilustra cómo obtener el último elemento de una matriz. A menudo verá esto:
$ echo ${array[${#array[@]} - 1]}
g
Como puede ver, debido a que estamos tratando con una matriz dispersa, este no es el último elemento. Sin embargo, esto funciona tanto en matrices dispersas como contiguas:
$ echo ${array[@]: -1}
i
¿Hay alguna manera de hacer algo como PHPs $array[] = ''foo'';
en bash vs haciendo:
array[0] = ''foo''
array[1] = ''bar''
Con una matriz indexada, puedes hacer algo como esto:
declare -a a=()
a+=(''foo'' ''bar'')
Sí hay:
ARRAY=()
ARRAY+=(''foo'')
ARRAY+=(''bar'')
Manual de referencia de Bash :
En el contexto en el que una instrucción de asignación está asignando un valor a una variable de shell o índice de matriz (vea Arreglos), el operador ''+ ='' se puede usar para agregar o agregar al valor anterior de la variable.
Si su matriz es siempre secuencial y comienza en 0, entonces puede hacer esto:
array[${#array[@]}] = ''foo''
${#array_name[@]}
obtiene la longitud de la matriz
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest