HervéRenault.fr

Logo du shell Bash

Aide-mémoire Bash

J'ai beau utiliser le shell Bash tous les jours depuis des années, j'en découvre toujours, régulièrement.

Les variables de type tableau (array) dans Bash

C'est la syntaxe la plus horrible que je connaisse mais il faut faire avec… Voici l'essentiel :

Tableau simple (!)

Tableau associatif (!!)

Tableaux multi-dimensionnels (?!?)

Ce n'est pas possible et, comme on peut le lire un peu partout à ce sujet : quand on en arrive à se poser la question, c'est qu'on devrait utiliser un vrai langage de programmation au lieu de Bash 😅 Mais comme migrer un script qu'on a commencé est plus difficile que s'entêter à utiliser Bash, on en vient à utiliser JSON avec le logiciel jq !

Par exemple, pour lire ce JSON :

[
    {
        "foo": 123,
        "bar": true
    },
    {
        "foo": 789,
        "bar": false
    }
]

On peut faire ce genre de bidouille :

#!/bin/bash

MON_JSON=$( cat fichier.json )

NOMBRE=$( echo "$MON_JSON" | jq 'length' )

for NUM in $( seq 0 $(( "$NOMBRE" - 1)) ); do
    FOO=$( echo "$MON_JSON" | jq -r ".[$NUM].foo"  )
    BAR=$( echo "$MON_JSON" | jq -r ".[$NUM].bar"  )
    echo "n° $NUM foo : $FOO bar : $BAR"
done

Article sympa en anglais sur ce sujet : Working with JSON in bash using jq (2020)