Bash Arrays Entrepth

Bash Arrays Entrepth
Dans Bash, un tableau peut être un tableau indexé ou un tableau associatif. Un tableau indexé est une liste dont les éléments sont numérotés à partir de zéro. Un tableau associatif est une liste où les chaînes ont remplacé les chiffres. Supposons un stylo, un livre d'exercice, un manuel, une règle, 42 $, et un crayon sur une table d'étude. Ces 6 éléments peuvent être écrits comme une liste, comme suit:
  1. stylo
  2. livre d'exercices
  3. cahier de texte
  4. règle
  5. 42
  6. crayon

Ceci est un exemple d'un tableau indexé. Il y a 6 articles, mais les éléments ont été numérotés de zéro à 5. La numérotation de cette façon est l'indexation. Le comptage d'index dans Bash commence à partir de zéro et non 1.

Chacun de ces produits est fabriqué à partir de matériaux principaux. Une liste du matériel principal, suivie de son produit fini, est:

encre => stylo
papier doux => livre d'exercice
papier dur => manuel
plastique => règle
papier spécial => 42
bois => crayon

Ceci est un exemple de tableau associatif. Il ne suffit pas de taper ces tableaux dans un fichier bash. L'un des différents types de tableaux doit être codé. Le codage d'un tableau indexé est similaire au codage d'un tableau associatif. Cependant, il existe de petites mais importantes différences. Cet article donne un aperçu approfondi des tableaux bash.

Contenu de l'article

  • Tableau indexé
  • Tableau associatif
  • Conclusion

Tableau indexé

Création d'un tableau indexé

Une façon de créer le tableau indexé ci-dessus est la suivante:

Arr = (Pen 'Exercice Book' "manuel" Règle 42 Crayon)

Ici, Arr est le nom du tableau. Le programmeur aurait pu donner un autre nom. Les espaces séparent les différents éléments de la liste des tableaux. Si un élément se compose de plus d'un mot, il est tapé dans des quottes simples ou doubles. L'indice pour le stylo est de 0; L'indice «livre d'exercice» est de 1; L'indice du «manuel» est de 2; L'indice de la règle est de 3; L'indice de 42 est de 4; L'index pour le crayon est 5.

Une autre façon de créer le tableau ci-dessus commence comme suit:

arr [2] = "manuel"

C'est-à-dire que le tableau est créé, à commencer par n'importe quel élément de la liste. `` 2 '' dans les crochets est connu comme un indice. Les autres éléments peuvent être inclus plus tard, comme suit:

arr [0] = stylo
arr [1] = 'livre d'exercices'
Arr [3] = règle
arr [4] = 42
arr [5] = crayon

Notez que dans l'inclusion, l'élément de l'index 2 n'a pas été répété.

Une autre façon de créer le tableau ci-dessus est la suivante:

DÉCLARIER -A ARR

Ici, «déclarer» est un mot réservé. «-a» signifie tableau indexé. «Arr» est le nom du choix du programmeur. Tous les éléments peuvent ensuite être inclus comme suit:

arr [0] = stylo
arr [1] = 'livre d'exercices'
arr [2] = "manuel"
Arr [3] = règle
arr [4] = 42
arr [5] = crayon

C'est l'inclusion par affectation. N'oubliez pas que lorsqu'une valeur est affectée à une variable, il ne devrait pas y avoir d'espace entre l'opérateur d'affectation, = et la variable ou la valeur.

Référence à l'élément indexé

La syntaxe pour référencer un élément est:

$ nom [indice]

Où le nom est le nom du tableau, comme Arr. L'indice est un entier (numéro).

Indices positifs

Le comptage d'index commence normalement à partir de zéro. Dans le code suivant, les valeurs des éléments sont lues et affichées:

Arr = (Pen 'Exercice Book' "manuel" Règle 42 Crayon)
pour ((i = 0; i < 6; ++i)); do
echo $ arr [i]
fait

La sortie est:

stylo
livre d'exercices
cahier de texte
règle
42
crayon

Six éléments commencent de l'index zéro à l'index 5. Donc, l'itération est effectuée 6 fois et pas 5 fois.

Indices négatifs

Des indices négatifs peuvent être utilisés pour accéder aux éléments. Dans ce cas, -1 fait référence au dernier élément; -2 fait référence au dernier élément mais un élément; -3 fait référence à l'élément avant le dernier mais un élément, et ainsi de suite. Donc, pour le tableau ci-dessus, -6 fait référence au premier élément. Le code suivant illustre ceci:

Arr = (Pen 'Exercice Book' "manuel" Règle 42 Crayon)
pour ((i = -1; i> = -6; --i)); faire
echo $ arr [i]
fait

La sortie est:

crayon
42
règle
cahier de texte
livre d'exercices
stylo

L'affichage est dans l'ordre inverse.

Affichage de tous les éléments dans un tableau indexé

Pour afficher tous les éléments, $ name [*] ou $ name [@] peut être utilisé. Dans ces expressions, * ou @ est à la place de l'index. Et avec cela, au lieu de renvoyer les valeurs des éléments, les valeurs des éléments présents dans le tableau sont renvoyés. Le code suivant illustre ceci:

DÉCLARIER -A ARR
arr [1] = 'exercice livre' arr [3] = règle arr [5] = crayon
echo $ arr [@]
echo $ arr [*]

La sortie est,
crayon de souverain de livre d'exercice
crayon de souverain de livre d'exercice

Remarquez que @ et * utilisés de cette manière sont des synonymes. Il y a un problème avec la sortie: les phrases sont séparées par des espaces et ne peuvent pas être distinguées. Le code suivant doit séparer les phrases avec des virgules:

DÉCLARIER -A ARR
arr [1] = 'exercice livre' arr [3] = règle arr [5] = crayon
Ifs =,
echo "$ arr [@]"
echo "$ arr [*]"

La sortie est maintenant:

crayon de souverain de livre d'exercice
livre d'exercices, règle, crayon

IFS signifie séparateur de champ interne. Il a été attribué une virgule. Remarque l'utilisation de Double Quotes pour $ arr [@] et $ arr [*] dans les commandes echo. Les virgules ont été inclus pour l'indice * et non pour l'indice @. Il y a encore un autre problème: dans la deuxième ligne de sortie, où des virgules ont été utilisés, les espaces n'ont pas été affichés. Donc, @ et * ne sont pas des synonymes tout le temps. Cependant, il est possible de se séparer avec des virgules et de l'espace - voir ci-dessous.

Affichage des indices de tableau indexé

L'expression, $ !nom [@] ou $ !Nom [*] Renvoie les indices d'un tableau comme une liste, séparés par des espaces. Notez l'utilisation et la position du signe d'exclamation (!). Le code suivant montre l'utilisation de ces expressions:

arr [1] = 'exercice livre' arr [3] = règle arr [5] = crayon
echo $ !arr [@]
echo $ !arr [*]

La sortie est:
1 3 5
1 3 5

Longueur du tableau indexé

La longueur du tableau est donnée par:

$ # name [Indice]

Où le nom est le nom tel que ARR, que le programmeur a donné au tableau; L'indice est l'index le plus élevé (longueur - 1) pour l'élément dont la valeur est définie. Notez l'utilisation et la position du symbole, #. Le code suivant illustre ceci:

Arr = (Pen 'Exercice Book' "manuel" Règle 42 Crayon)
echo $ # arr [5]

La sortie est 6. Même si certains ou tous les éléments inférieurs ne sont pas présents, la longueur serait toujours plus élevée_index + 1. Le code suivant illustre ceci:

DÉCLARIER -A ARR
Arr [3] = règle
arr [5] = crayon
echo $ # arr [5]

La sortie est toujours 6, même si aucun élément n'est là, pour l'index 0, l'index 1, l'index 2 et l'index 4.

Nombre d'éléments du tableau indexé

Comme indiqué ci-dessus, le nombre d'éléments dans le tableau peut être inférieur à la longueur du tableau. En effet. L'expression donne le nombre d'éléments définis dans un tableau indexé, $ # arr [@] ou $ # arr [*], comme indiqué dans le code suivant:

arr [1] = 'exercice livre' arr [3] = règle arr [5] = crayon
echo $ # arr [@]
echo $ # arr [*]

La sortie est:

3
3

Affichage des éléments de jeu de tableau uniquement indexés

Un élément d'index attribué une valeur est défini, tandis que ce qui n'est pas attribué une valeur n'est pas défini. Le code suivant affiche uniquement les valeurs définies:

arr [1] = 'exercice livre' arr [3] = règle arr [5] = crayon
pour ((i = 0; i < $#arr[5]; ++i)); do
si [ ! -z "$ arr [i]"]; alors
printf "$ arr [i],"
Fi
fait
écho

La sortie est:

livre d'exercices, règle, crayon,

Notez comment les éléments non définis ont été identifiés et éliminés de l'itération dans la condition. Notez également que dans la condition, $ arr [i] est en double-quotes comme "$ arr [i]", afin que les valeurs contenant des espaces puissent être imprimées. La commande printf est similaire à la commande echo mais n'ajoute pas de nouvelle ligne après avoir affiché. Il a été possible de séparer les valeurs à la sortie, avec une virgule et un espace, en une seule ligne. Le dernier écho ferait passer la sortie suivante à la ligne suivante.

Une forme plus simple du code ci-dessus est la suivante:

arr [1] = 'exercice livre' arr [3] = règle arr [5] = crayon
pour je dans $ !arr [@]; faire
printf "$ arr [i],"
fait
écho

La sortie est la même. Notez l'expression de la liste après le mot réservé, dans. Cette expression renvoie la liste des indices. Il n'y a donc pas besoin de la condition IF ici.

Définition et éléments indexés et son entretien et son tableau

Tout élément indexé qui n'a pas été attribué de valeur n'est pas défini. Un élément indexé qui a une valeur qui lui est attribuée est défini. Maintenant, un élément peut être intentionnellement non set, comme le montre le script suivant:

arr [1] = 'exercice livre' arr [3] = règle arr [5] = crayon
Unred Arr [3]
pour je dans $ !arr [@]; faire
printf "$ arr [i],"
fait
écho

La sortie est:

livre d'exercice, crayon,

«Règle» n'a pas été affichée. La syntaxe pour unset un élément est:

Name ArrayName [Indice]

La syntaxe pour supprimer ou unper le tableau entier est:

Nom de décontenance

ou

Unset ArrayName [@]

ou

un nom de stimulation [*]

Dans le code suivant, l'ensemble du tableau n'est pas défini:

Arr = (Pen 'Exercice Book' "manuel" Règle 42 Crayon)
undage à l'arr
echo "$ arr [*]"

La sortie n'est rien (une ligne vide) parce que l'ensemble du tableau n'a pas été défini.

Tableau associatif

Comme indiqué ci-dessus, un exemple de tableau associatif écrit sur papier est:

encre => stylo
papier doux => livre d'exercice
papier dur => manuel
plastique => règle
papier spécial => 42
bois => crayon

Il y a 6 éléments, chacun composé d'une paire clé / valeur. Pour le premier élément, «encre» est la clé et «stylo» est la valeur; Pour le deuxième élément, le «papier doux» est la clé et le «livre d'exercice» est la valeur; et ainsi de suite.

Créer un tableau associatif

Une façon de créer le tableau ci-dessus est la suivante:

Declare -a arr = ([ink] = stylo [papier doux] = 'exercice livre' [papier dur] = "livre de texte" [plastique] = règle [papier spécial] = 42 [bois] = crayon)

Ici, Arr est le nom du tableau. Le programmeur aurait pu donner un autre nom. Les espaces séparent les différents éléments de la liste des tableaux. Si une valeur se compose de plus d'un mot, elle est tapée dans des quotes simples ou doubles. Une clé peut être composée de plus d'un mot. Il y a 6 paires de clés / valeur dans ce tableau associatif codé. Une clé est placée sur des crochets. La valeur est attribuée à la clé, avec l'opérateur d'affectation. «-A» signifie un tableau associatif, et il devrait être là.

Une autre façon de créer le tableau ci-dessus commence comme suit:

DÉCLARIER -A ARR

Ici, «déclarer» est un mot réservé. «-A» signifie un tableau associatif (tandis que «-a» signifie un tableau indexé). «Arr» est le nom du choix du programmeur. Les éléments peuvent ensuite être inclus comme suit:

DÉCLARIER -A ARR
arr [papier doux] = 'livre d'exercices'
arr [plastique] = règle
arr [bois] = crayon

Tous les éléments (6) ne doivent pas nécessairement être inclus en même temps. Le reste peut être ajouté plus tard. Cela ajoute par affectation. N'oubliez pas que lorsqu'une valeur est affectée à une variable, il ne devrait pas y avoir d'espace entre l'opérateur d'affectation, = et la variable ou la valeur.

Référence à l'élément de tableau associatif

La syntaxe pour référencer un élément de tableau associatif est:

$ nom [indice]

Où le nom est le nom du tableau, comme Arr. L'indice est la clé du formulaire de texte. Dans le code suivant, les valeurs des éléments sont lues et affichées:

Declare -a arr = ([ink] = Pen [papier doux] = 'exercice livre' [papier dur] = "manuel" [plastique] = règle [papier spécial] = 42 [bois] = crayon)
echo $ arr [ink]
echo $ arr [papier doux]
echo $ arr [papier dur]
echo $ arr [plastique]
echo $ arr [papier spécial]
echo $ arr [wood]

La sortie est:

stylo
livre d'exercices
cahier de texte
règle
42
crayon

Affichage de toutes les valeurs dans un tableau associatif

Pour afficher toutes les valeurs, $ name [*] ou $ name [@] peut être utilisé. Dans ces expressions, * ou @ est à la place de la clé. Et avec cela, au lieu de renvoyer les valeurs des éléments, les valeurs des éléments présents dans le tableau sont renvoyés. Le code suivant illustre ceci:

DÉCLARIER -A ARR
arr [papier doux] = 'exercice livre' arr [plastique] = règle arr [wood] = crayon
echo $ arr [@]
echo $ arr [*]

La sortie est,

Règle de livre d'exercice au crayon
Règle de livre d'exercice au crayon

L'ordre des valeurs à la sortie ne doit pas correspondre à l'ordre dans le tableau associatif. Remarquez que @ et * utilisés de cette manière sont des synonymes. Il y a un problème avec la sortie: les phrases sont séparées par des espaces et ne peuvent pas être distinguées. Le code suivant sépare les phrases avec des virgules:

DÉCLARIER -A ARR
arr [papier doux] = 'exercice livre' arr [plastique] = règle arr [wood] = crayon
Ifs =,
echo "$ arr [@]"
echo "$ arr [*]"

La sortie est maintenant:

Règle de livre d'exercice au crayon
crayon, livre d'exercice, règle

IFS signifie séparateur de champ interne. Il a été attribué une virgule. Remarque l'utilisation de Double Quotes pour $ arr [@] et $ arr [*] dans les commandes echo. Les virgules ont été inclus pour l'indice * et non pour l'indice @. Il y a encore un autre problème: dans la deuxième ligne de sortie, où des virgules ont été utilisés, les espaces n'ont pas été affichés. Donc, @ et * ne sont pas des synonymes tout le temps. Eh bien, il est possible de se séparer avec des virgules et de l'espace - voir ci-dessous.

Affichage de toutes les clés du tableau associatif

L'expression, $ !nom [@] ou $ !Nom [*] Renvoie les clés d'un tableau comme une liste, séparée par des espaces. Notez l'utilisation et la position du signe d'exclamation (!). Le code suivant montre l'utilisation de ces expressions:

DÉCLARIER -A ARR
arr [papier doux] = 'exercice livre' arr [plastique] = règle arr [wood] = crayon
echo $ !arr [@]
echo $ !arr [*]

La sortie est:

bois doux en papier plastique
bois doux en papier plastique

L'ordre des clés du tableau associatif ne doit pas être le même que celui déclaré dans le tableau.

Nombre d'éléments de tableau associatif

L'expression donne le nombre d'éléments définis dans un tableau associatif, $ # arr [@] ou $ # arr [*], comme indiqué dans le code suivant:

DÉCLARIER -A ARR
arr [papier doux] = 'exercice livre' arr [plastique] = règle arr [wood] = crayon
echo $ # arr [@]
echo $ # arr [*]

La sortie est:

3
3

Notez l'utilisation et la position du symbole, #.

Affichage des éléments de jeu de tableaux associatifs

Un élément clé attribué une valeur est défini, tandis que ce qui ne se voit pas une valeur est non pas. Le code suivant affiche uniquement les valeurs définies:

DÉCLARIER -A ARR
arr [encre] = stylo
$ arr [papier doux]; arr [papier doux] = 'livre d'exercices'
$ arr [papier dur]
arr [plastique] = règle
$ arr [papier spécial]
arr [bois] = crayon
pour la clé dans "$ !arr [@] "; do
printf "$ arr [$ key],"
fait
écho

La sortie est:

crayon, livre d'exercice, stylo, souverain,

Encore une fois, le positionnement de sortie n'est pas dans l'ordre qui a été codé. Notez que «$ !arr [@] ”est en double quot. Notez que dans $ arr [$ key], la clé est précédée de $. La commande printf est similaire à la commande echo mais n'ajoute pas de nouvelle ligne après avoir affiché. Il a été possible de séparer les valeurs à la sortie, avec une virgule et un espace, en une seule ligne. Le dernier écho ferait passer la sortie suivante à la ligne suivante.

Définir et décolorer les éléments de tableau associatif et son tableau

Tout élément clé qui n'a pas été attribué de valeur n'est pas défini. Un élément clé qui a une valeur qui lui est attribuée est définie. Maintenant, un élément peut être intentionnellement non set, comme le montre le script suivant:

DÉCLARIER -A ARR
arr [papier doux] = 'exercice livre' arr [plastique] = règle arr [wood] = crayon
un arrond non fini [plastique]
pour la clé dans "$ !arr [@] "; do
printf "$ arr [$ key],"
fait
écho

La sortie est:

crayon, livre d'exercice,

«Règle» n'a pas été affichée. La syntaxe pour unset un élément est:

un nom d'arrayName [KEY]

La syntaxe pour supprimer ou unper l'ensemble du tableau associatif est:

Nom de décontenance

ou

Unset ArrayName [@]

ou

un nom de stimulation [*]

Dans le code suivant, l'ensemble du tableau n'est pas défini:

Declare -a arr = ([ink] = stylo [papier doux] = 'exercice livre' [papier dur] = "livre de texte" [plastique] = règle [papier spécial] = 42 [bois] = crayon)
undage à l'arr
echo "$ arr [*]"

La sortie n'est rien (une ligne vide) parce que l'ensemble du tableau n'a pas été défini.

Affichage des valeurs d'un tableau associé

Affichage des valeurs d'un tableau associé

Declare -a arr = ([ink] = stylo [papier doux] = 'exercice livre' [papier dur] = "livre de texte" [plastique] = règle [papier spécial] = 42 [bois] = crayon)
pour la valeur dans "$ arr [@]"; faire
Echo $ valeur
fait

La sortie est:

crayon
42
livre d'exercices
cahier de texte
stylo
règle

Encore une fois, l'ordre dans lequel les valeurs sont codées dans un tableau associatif ne doivent pas être l'ordre dans lequel ils sont affichés. Notez que @ a été utilisé au lieu de * pour la variable de liste. De plus, des devis doubles ont été utilisés pour la variable de liste.

Conclusion

Un tableau est une liste, numérotée ou clés. Lorsque le tableau est numéroté, c'est un tableau indexé. Lorsque les valeurs sont situées par des clés, c'est un tableau associatif. Avec le tableau indexé, la numérotation commence à partir de zéro. En informatique, le tableau doit être codé. Le programmeur doit savoir comment créer le tableau. Il a besoin de savoir comment ajouter des éléments au tableau et supprimer des éléments du tableau. Il doit être en mesure de déterminer le nombre d'éléments dans le tableau. Et il a besoin de savoir comment supprimer le tableau.