variable una script recorrer pasar parametros funciones crear contador array bash arrays

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