GNU/Linux >> Tutoriels Linux >  >> Linux

Tableaux bash

Les tableaux sont l'une des structures de données les plus utilisées et les plus fondamentales. Vous pouvez penser qu'un tableau est une variable qui peut stocker plusieurs variables en son sein.

Dans cet article, nous couvrirons les tableaux Bash et expliquerons comment les utiliser dans vos scripts Bash.

Tableaux bash #

Bash prend en charge les types de tableaux unidimensionnels indexés numériquement et associatifs. Les tableaux numériques sont référencés à l'aide d'entiers et les tableaux associatifs à l'aide de chaînes.

Les tableaux indexés numériquement sont accessibles à partir de la fin en utilisant des indices négatifs, l'indice de -1 fait référence au dernier élément. Les indices ne doivent pas nécessairement être contigus.

Contrairement à la plupart des langages de programmation, les éléments du tableau Bash n'ont pas besoin d'être du même type de données. Vous pouvez créer un tableau contenant à la fois des chaînes et des nombres.

Bash ne prend pas en charge les tableaux multidimensionnels et vous ne pouvez pas avoir d'éléments de tableau qui sont également des tableaux.

Il n'y a pas de limite au nombre maximum d'éléments pouvant être stockés dans un tableau.

Création de tableaux Bash #

Les tableaux dans Bash peuvent être initialisés de différentes manières.

Créer des tableaux indexés numériquement #

Les variables bash ne sont pas typées, n'importe quelle variable peut être utilisée comme tableau indexé sans la déclarer.

Pour déclarer explicitement un tableau, utilisez la commande interne declare :

declare -a array_name

Une façon de créer un tableau indexé consiste à utiliser le formulaire suivant :

array_name[index_1]=value_1
array_name[index_2]=value_2
array_name[index_n]=value_n

index_* est un entier positif.

Une autre façon de créer un tableau numérique est de spécifier la liste des éléments entre parenthèses, séparés par un espace vide :

array_name=( element_1 element_2 element_N )

Lorsque le tableau est créé à l'aide du formulaire ci-dessus, l'indexation commence à zéro, c'est-à-dire que le premier élément a un index de 0 .

Création de tableaux associatifs #

Contrairement à l'indexation numérique, les tableaux associatifs doivent être déclarés avant de pouvoir être utilisés.

Pour déclarer un tableau associatif, utilisez le declare intégré avec le -A option (majuscule) :

declare -A array_name

Les tableaux associatifs peuvent être créés en utilisant le formulaire suivant :

declare -A array_name

array_name[index_foo]=value_foo
array_name[index_bar]=value_bar
array_name[index_xyz]=value_xyz

index_* peut être n'importe quelle chaîne.

Vous pouvez également créer un tableau associatif en utilisant le formulaire ci-dessous :

declare -A array_name

array_name=( 
  [index_foo]=value_foo 
  [index_bar]=value_bar 
  [index_xyz]=value_xyz 
)

Opérations de tableau #

La syntaxe des tableaux bash peut sembler un peu étrange au début, mais cela aura plus de sens une fois que vous aurez lu cet article.

Éléments de référence #

Pour référencer un seul élément, vous devez connaître l'index de l'élément.

Tout élément peut être référencé en utilisant la syntaxe suivante :

${array_name[index]}
La syntaxe d'accès à un élément de tableau est similaire à la syntaxe de la plupart des langages de programmation. Les accolades ${} sont nécessaires pour éviter les opérateurs d'expansion de nom de fichier du shell.

Imprimons l'élément avec l'index de 1 :

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print element
echo ${my_array[1]}
Helium

Si vous utilisez @ ou * en tant qu'index, le mot s'étend à tous les membres du tableau. Pour imprimer tous les éléments que vous utiliseriez :

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium

La seule différence entre @ et * est lorsque la forme ${my_array[x]} est entouré de guillemets doubles. Dans ce cas, * se développe en un seul mot où les éléments du tableau sont séparés par un espace. @ étend chaque élément du tableau à un mot séparé. Ceci est particulièrement important lorsque vous utilisez le formulaire pour analphabèter les éléments du tableau.

Pour imprimer les clés du tableau ajouter le ! opérateur avant le nom du tableau :

${!array_name[index]}

Voici un exemple :

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${!my_array[@]}"
0 1 2 3

Longueur du tableau #

Pour obtenir la longueur d'un tableau, utilisez la forme suivante :

${#array_name[@]}
La syntaxe est la même que lors du référencement de tous les éléments avec l'ajout du # caractère avant le nom du tableau.
## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## array Length
echo ${#my_array[@]}
4

Boucle dans le tableau #

La façon la plus courante d'itérer sur chaque élément d'un tableau consiste à utiliser la boucle for :

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${my_array[@]}"
do 
  echo "$i"
done

Le code ci-dessus parcourra le tableau et imprimera chaque élément dans une nouvelle ligne :

Hydrogen
Helium
Lithium
Beryllium

Voici un exemple d'impression de toutes les clés et valeurs :

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${!my_array[@]}"
do
  echo "$i" "${my_array[$i]}"
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

Une autre façon de parcourir un tableau consiste à obtenir la longueur du tableau et à utiliser le C style boucle :

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

# Length of the array
length=${#my_array[@]}

# Array Loop
for (( i=0; i < ${length}; i++ ))
do
  echo $i ${my_array[$i]}
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

Ajouter un nouvel élément #

Pour ajouter un nouvel élément à un tableau bash et spécifier son index, utilisez le formulaire suivant :

my_array[index_n]="New Element"

Voici un exemple :

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new element
my_array[9]="Aluminum"

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Aluminum

Une autre façon d'ajouter un nouvel élément à un tableau sans spécifier l'index consiste à utiliser le += opérateur. Vous pouvez ajouter un ou plusieurs éléments :

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new elements
my_array+=( Cobalt Nickel )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Cobalt Nickel

Supprimer un élément #

Pour supprimer un seul élément, vous devez connaître l'index de l'élément. Un élément peut être supprimé en utilisant le unset commande :

unset my_array[index]

Voyons un exemple :

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## remove element
unset my_array[2]

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Beryllium

Conclusion #

Nous avons expliqué comment créer des tableaux indexés numériquement et associatifs. Nous avons également montré comment parcourir les tableaux, calculer la longueur du tableau et ajouter et supprimer des éléments.

Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.


Linux
  1. Comment créer un tableau d'éléments uniques à partir d'une chaîne/tableau dans Bash ?

  2. Bash tableau de tableaux?

  3. Tableaux bash avec exemples

  4. Les tableaux AWK expliqués avec 5 exemples pratiques

  5. Le tutoriel Ultimate Bash Array avec 15 exemples

Bash Shebang

Tableau associatif dans Bash

Bash Scripting - Tableau associatif expliqué avec des exemples

Bash Beginner Series #4 :Utiliser des tableaux dans Bash

Tableaux bash et indices négatifs, oui ou non ?

Comment déclarer un tableau 2D dans bash