986 votes

Bash: ajouter de la valeur à un tableau sans spécifier une clé

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

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

1901voto

e-t172 Points 4408

Oui, il y a:

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

Bash Manuel De Référence:

Dans le contexte où une instruction d'affectation est l'affectation d'une valeur à une variable du shell ou d'index de tableau (voir Tableaux), le ‘+=' opérateur peut être utilisé pour ajouter ou d'ajouter à la variable la valeur précédente.

97voto

Dennis Williamson Points 105818

En tant que Gars Muet de points, il est important de noter que le tableau commence à zéro et est séquentielle. Puisque vous pouvez faire des assignations et unset non contigus indices ${#array[@]} n'est pas toujours l'élément suivant à la fin du tableau.

$ 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

Voici comment obtenir le dernier indice:

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

Qui explique comment obtenir le dernier élément d'un tableau. Vous verrez souvent ce:

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

Comme vous pouvez le voir, parce que nous avons affaire à un tableau fragmenté, ce n'est pas le dernier élément. Cela fonctionne à la fois rares et contiguë tableaux, si:

$ echo ${array[@]: -1}
i

68voto

ghostdog74 Points 86060
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest

37voto

Dumb Guy Points 1651

Si vous tableau est toujours séquentielle et commence à 0, alors vous pouvez faire ceci:

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

${#array_name[@]} obtient la longueur de la matrice

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X