Diviser la chaîne en tableau dans Bash

Fumbani Banda 30 janvier 2023
  1. Utilisation de la commande read pour diviser une chaîne en un tableau dans Bash
  2. Utilisation de la commande tr pour diviser une chaîne en un tableau dans Bash
  3. Utilisation de l’expansion des paramètres pour diviser une chaîne en un tableau dans Bash
Diviser la chaîne en tableau dans Bash

Ce tutoriel explique la division d’une chaîne en un tableau dans bash à l’aide de la commande read, de la commande tr et de l’expansion des paramètres.

Utilisation de la commande read pour diviser une chaîne en un tableau dans Bash

La commande read est une commande intégrée sur les systèmes Linux.

Il permet de lire le contenu d’une ligne dans une variable. Il divise également les mots d’une chaîne affectée à une variable shell.

Dans le script ci-dessous, la variable chaîne $addrs est passée à la commande read. Le IFS définit le délimiteur qui agit comme une limite de mot sur la variable de chaîne.

Cela signifie que le - est le mot limite dans notre cas. L’option -a indique à la commande read de stocker les mots qui ont été divisés dans un tableau, tandis que l’option -r indique à la commande read de traiter tous les caractères d’échappement tels qu’ils sont et de ne pas les interpréter.

Les mots qui ont été scindés sont stockés dans la variable ip_array. Pour accéder aux éléments individuels à l’intérieur du tableau, nous utilisons cette syntaxe, ${array name[index]}.

Dans le script ci-dessous, ip_array est le nom du tableau et 0 est l’indice désignant le premier élément du tableau.

#!/usr/bin/env bash

addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"

IFS=',' read -ra ip_array <<< "$addrs"

printf "${ip_array[0]}\n"

La sortie affiche le premier élément du tableau.

192.168.8.1

Le script ci-dessous ajoute une boucle for parcourant le tableau et imprime tous les éléments à l’aide de la commande echo.

#!/usr/bin/env bash

addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"

IFS=',' read -r -a ip_array <<< "$addrs"

for ip in "${ip_array[@]}"
do
    echo "$ip"
done

La sortie ci-dessous affiche tous les éléments qui sont à l’intérieur du tableau.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Utilisation de la commande tr pour diviser une chaîne en un tableau dans Bash

La commande tr est une forme abrégée de translate.

Il traduit, supprime et compresse les caractères de l’entrée standard et écrit les résultats dans la sortie standard. C’est une commande utile pour manipuler du texte sur la ligne de commande ou dans un script bash.

Il peut être utilisé pour supprimer des caractères répétés, convertir des minuscules en majuscules et remplacer des caractères.

Dans le script bash ci-dessous, la commande echo dirige la variable de chaîne, $addrs, vers la commande tr, qui divise la variable de chaîne sur un délimiteur, ;. Une fois la chaîne découpée, les valeurs sont affectées au tableau ip_addrs.

La boucle for parcourt le tableau $ip_addrs et imprime toutes les valeurs à l’aide de la commande printf.

#!/bin/bash

addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"

ip_addrs=(`echo $addrs | tr ',' ' '`)

for ip in "${ip_addrs[@]}"
do
    printf "$ip\n"
done

La sortie ci-dessous affiche tous les éléments qui sont à l’intérieur du tableau.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Utilisation de l’expansion des paramètres pour diviser une chaîne en un tableau dans Bash

Le script ci-dessous utilise l’expansion des paramètres pour rechercher et remplacer des caractères.

La syntaxe utilisée pour l’expansion des paramètres est ${variable//search/replace}. Il recherche un motif qui correspond à search dans la variable et le remplace par le replace.

Dans notre cas, le script recherche le motif , et le remplace par un espace blanc dans la variable de chaîne $addrs. Les parenthèses autour de $addrs sont utilisées pour définir un tableau de la nouvelle chaîne, appelé ip_array.

On utilise la boucle for pour itérer sur tous les éléments du ip_array et les afficher à l’aide de la commande echo.

#!/bin/bash

addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"

set -f
ip_array=(${addrs//,/ })

for ip in "${!ip_array[@]}"
do
    echo "[$ip] ${ip_array[ip]}"
done

La sortie ci-dessous affiche tous les éléments qui sont à l’intérieur du tableau.

[0] 192.168.8.1
[1] 192.168.8.2
[2] 192.168.8.3
[3] 192.168.8.4
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Article connexe - Bash String

Article connexe - Bash Array