Bash : Tableaux

De Justine's wiki
Aller à la navigation Aller à la recherche

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 $>