Ajouter un nouvel élément à un tableau sans spécifier l’index dans Bash

Est-il possible de faire quelque chose comme PHP $array[] = 'foo'; en bash vs faire:

 array[0] = 'foo' array[1] = 'bar' 

Oui il y a:

 ARRAY=() ARRAY+=('foo') ARRAY+=('bar') 

Manuel de référence Bash :

Dans le contexte où une instruction d’affectation atsortingbue une valeur à une variable shell ou à un index de tableau (voir Arrays), l’opérateur ‘+ =’ peut être utilisé pour append ou append à la valeur précédente de la variable.

Comme le fait remarquer Dumb Guy , il est important de noter si le tableau commence à zéro et est séquentiel. Étant donné que vous pouvez créer des assignations à des index non contigus et les désactiver, ${#array[@]} n’est pas toujours l’élément suivant à la fin du tableau.

 $ array=(abcdefgh) $ 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 

Voici comment obtenir le dernier index:

 $ end=(${!array[@]}) # put all the indices in an array $ end=${end[@]: -1} # get the last one $ echo $end 42 

Cela illustre comment obtenir le dernier élément d’un tableau. Vous verrez souvent ceci:

 $ echo ${array[${#array[@]} - 1]} g 

Comme vous pouvez le voir, comme nous avons affaire à un tableau fragmenté, ce n’est pas le dernier élément. Cela fonctionne à la fois sur les tableaux clairsemés et contigus, cependant:

 $ echo ${array[@]: -1} i 
 $ declare -a arr $ arr=("a") $ arr=("${arr[@]}" "new") $ echo ${arr[@]} a new $ arr=("${arr[@]}" "newest") $ echo ${arr[@]} a new newest 

Si votre tableau est toujours séquentiel et commence à 0, vous pouvez le faire:

array[${#array[@]}] = 'foo'

${#array_name[@]} obtient la longueur du tableau

Avec un tableau indexé, vous pouvez choisir quelque chose comme ceci:

 declare -aa=() a+=('foo' 'bar')