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 en lecture seule (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
-
Exemple dans le contexte dâune fonction bash
function test2 { local -ra _array_=(a b c) for i in "${!_array_[@]}" ; do echo "$i - ${_array_[$i]}" done } test2
Qui produit le mĂȘme rĂ©sultat que ci-dessus.
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
኿