cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

L'usage de la boucle for en bash est souvent mal documenté dans les exemples, ici je vais juste m’attarder sur le cas d’une boucle pour parcourir un tableau.



Cas de base

Le cas le plus simple est celui ou l’on souhaite parcourir les éléments d’un tableau dans l’ordre et sans autre contrainte.

Exemple directement depuis un terminal

_array_=(a b c) ; for v in "${_array_[@]}" ; do echo "$v" ; done

code qui produira :

a
b
c
  • Exemple dans le contexte d’une fonction bash
    function test1 {
      local -ra _array_=(a b c) # le type de la variable (a = « array »)
                                # variable a lecture seules (r = « read-only »)
    
      for v in "${_array_[@]}" ; do
        echo "$v"
      done
    }
    
    test1
    

    Qui produit le même résultat que l’affichage précédent.

Pour créer un tableau la syntaxe utiliser les parenthèses :

montableau=("le soleil" "la lune" "la terre") # Notez l’usage du caractère « " »

Pour adresser (passer en paramètre par exemple) l’ensemble des valeurs vous devez utiliser la syntaxe ${_array_[@]}:

echo ${montableau[@]}

C’est d’ailleurs ce que l’on fait dans le cas de la boucle ci-dessus, essayez :

montableau=("le soleil" "la lune" "la terre")

for valeur in "${montableau[@]}" ; do echo "${valeur}" ; done

Le suffixe « [@] » permet d’obtenir l’ensemble des éléments d’un tableau.



Cas nécessitant la position dans le tableau

Si vous avez besoin de la position de l’élément dans le tableau, on parlera de l’index de l’élément.

Exemple dans le terminal

_array_=(a b c) ; for i in "${!_array_[@]}" ; do echo "$i - ${_array_[$i]}" ; done
0 - a
1 - b
2 - c

Ici on utilise la syntaxe ${!_array_[@]}, vous remarquerez le « ! » au début du nom de la variable qui permet d’obtenir la séquence des indices des éléments du tableau.

montableau=("mercure" "vénus" "terre" )

echo "${!montableau[@]}" # retournera les valeurs 0 1 2

montableau+=("mars") # on ajoute une entrée dans le tableau

echo "${!montableau[@]}" # retournera les valeurs 0 1 2 3

Le préfixe « ! » permet d’obtenir la séquence des index d’un tableau.

Et on utilise également la syntaxe de la forme ${_array_[0]}, où le nombre « 0 » est remplacé par la suite des entiers compris partant de « 0 » et allant jusqu’à « nombre_d_élément - 1 ».

montableau=("mercure" "vénus" "terre" "mars")

echo "!${montableau[@]}" # affichera la valeur 3
echo "${montableau[0]}" # affichera la chaîne « mercure »
echo "${montableau[1]}" # affichera la chaîne « vénus »
echo "${montableau[2]}" # affichera la chaîne « terre »
echo "${montableau[3]}" # affichera la chaîne « mars »

Le suffixe « [n] » permet d’obtenir la valeur de la « n-ième » entrée du tableau.

Il est possible d’utiliser une variable contenant la valeur de l’index, supposons un tableau « array », une variable « index », on écrira alors :
${_array_[$_index_]} ou ${_array_[${_index_}]}

Par exemple :

mon_tableau=("mercure" "vénus" "terre" "mars")
mon_index=3

echo "${mon_tableau[$mon_index]}"
echo "${mon_tableau[${mon_index}]}"

Petit extra…

Il se peut que vous ayez besoin de connaître le nombre d’élément dans le tableau, pour cela, il faut utiliser la syntaxe ${#_array_[@]}

Le préfixe « # » permet d’obtenir le nombre d’éléments présent un tableau.

montableau=("mercure" "venus" "terre" "mars")

echo "${#montableau[@]}" # affichera la valeur 4

ᦿ


ℹ 2006 - 2021 | 🏠 Retour à l'accueil du domaine | 🏡 Retour à l'accueil du blog