Bash : Tableaux
Généralités
Bash ne supporte que les tableaux monodimensionnels; aucune initialisation n'est obligatoire. Les indices commencent à 0; assigner une valeur à un indice l'initialise automatiquement.
On peut assigner dirctement une valeur à un indice particulier, ce qui a pour conséquence que les membres d'un tableau ne peuvent pas être consécutifs.
Les tableaux en bash ne correspondent ni aux listes ni aux dictionnaires Python. Ne pas faire la relation liste = tableau. Les indices ne sont pas forcément initialisés les uns après les autres; ils sont bien des chiffres (0, 1, 2, 3...) mais ne sont pas forcément initialisés les uns après les autres.
Syntaxe
4 façons d'assigner des valeurs à un tableau :
- En spécifiant directement un indice
- En déclarant une série de valeurs, avec incrémentation automatique des indices
- En déclarant une série de valeurs en forçant les indices
- Par saisie utilisateur ( avec read -a nomdutableau)
Exemple :
#!/bin/bash # 4 méthodes d'assignation de valeurs monTableau1[0]="valeur" monTableau2=("val1" "val2" "val3" "val4") monTableau3=([0]="val1" [5]="val6" [9]="val10") read -p "Saisir les éléments du tableau : " -a monTableau4 # affichage de tous les éléments echo "Tous les éléments de monTableau1 : "${monTableau1[*]} echo "Tous les éléments de monTableau2 : "${monTableau2[*]} echo "Tous les éléments de monTableau3 : "${monTableau3[*]} echo "Tous les éléments de monTableau4 : "${monTableau4[*]}
Compléments
Récupération de valeurs
On récupère une valeur par la syntaxe : ${tableau[indice]}
BASH $> monTableau3=([0]="val1" [5]="val6" [9]="val10") BASH $> echo ${monTableau3[5]} val6 BASH $> echo ${monTableau3[*]} val1 val6 val10 BASH $>
Nombre d'éléments initialisés
Pour connaître le nombre d'éléments initialisés d'un tableau on utilise la syntaxe ${#tableau[*]}
'''BASH $>''' monTableau3=([0]="val1" [5]="val6" [9]="val10") '''BASH $>''' echo ${#monTableau3[*]} '''3''' '''BASH $>'''
Indice des éléments initialisés
On peut récupérer les indices des éléments initialisés; cela peut par exemple permettre de récupérer aisément les valeurs associées à ces indices. En gros, on peut parcourir un tableau : celui ci renverra tous les indices existants et éventuellement leur contenu.
#!/bin/bash # Initialisation monTableau3=([0]="val1" [5]="val6" [9]="val10") # Parcours de tous les éléments d'un tableau par son indice for i in ${!monTableau3[*]}; do echo "$i => ${monTableau3[i]}" done
Suppression
On peut supprimer une valeur ou un tableau entier en utilisant la commande unset :
BASH $> monTableau3=([0]="val1" [5]="val6" [9]="val10") BASH $> unset $monTableau3[0] BASH $> echo ${monTableau3[*]} val6 val10 BASH $> unset $monTableau3 BASH $> echo ${monTableau3[*]} BASH $>