Recherche de site Web

Utilisation de la commande Bash declare avec des exemples


La commande declare dans Bash est utilisée pour définir, modifier et afficher des variables et des fonctions. Dans le Scripting Bash, le but principal de la commande declare est de définir des attributs pour les variables et les fonctions et de montrer leur état actuel.

Dans ce tutoriel, nous apprendrons comment utiliser la commande declare dans les scripts Bash avec des exemples sur Linux.

1. Utilisation de base de la commande declare dans Bash

1.1. Définir une variable

La commande declare est souvent utilisée pour définir des variables avec des attributs spécifiques.

declare my_var="Hello, World!"
echo "$my_var"

Déclarer une variable

Cela fonctionne de la même manière qu'une affectation de variable normale (my_var="Hello, World!").

1.2. Mettre une variable en majuscules

declare -u upper_var="hello world"
echo "$upper_var"  # Outputs "HELLO WORLD"

Le drapeau -u convertit la valeur de upper_var en majuscules.

1.3. Mettre une variable en minuscules

declare -l lower_var="HELLO WORLD"
echo "$lower_var"  # Outputs "hello world"

Le drapeau -l convertit la valeur de lower_var en minuscules.

2. Liste des variables et de leurs valeurs

2.1. Lister toutes les variables

declare -p

Cela montre toutes les variables et leurs valeurs.

2.2. Lister une variable spécifique

declare -p my_var

Sortie :

declare -- my_var="Hello, World!"

Le declare -- signifie que c’est une variable normale sans attributs spéciaux.

3. Attributs spéciaux avec declare

3.1. Rendre une variable en lecture seule (-r)

Définir une variable en lecture seule :

declare -r readonly_var="Fixed Value"
readonly_var="New Value"  # This will cause an error

L’option -r rend readonly_var en lecture seule. Tenter de la modifier entraînera une erreur. Une fois définie, elle ne peut pas être changée.

3.2. Forcer une variable à être un entier (-i)

Bash considérera la variable comme un nombre et effectuera automatiquement des calculs.

declare -i num=10
num+=5
echo "$num"  # Output: 15

Le drapeau -i rend num un entier. Si vous attribuez une valeur non entière, elle sera par défaut 0.

Si vous essayez d'assigner une valeur non numérique, elle sera ignorée :

num="hello"
echo "$num"  # It will display 0.

3.3. Définir une variable comme un tableau indexé

declare -a my_array=("apple" "banana" "cherry")

Le -a flag fait de my_array un tableau indexé.

Pour imprimer tout le tableau, vous pouvez utiliser :

echo "${my_array[@]}"

Exemple de sortie :

apple banana cherry

Pour accéder aux éléments individuels du tableau :

echo "${my_array[0]}"  # Output: apple
echo "${my_array[1]}"  # Output: banana
echo "${my_array[2]}"  # Output: cherry

Parcourir le tableau :

for item in "${my_array[@]}"; do
    echo "$item"
done

Obtenir la longueur du tableau :

echo "${#my_array[@]}"  # Output: 3

Ajouter un nouvel élément :

my_array+=("date")
echo "${my_array[@]}"  # Output: apple banana cherry date

Suppression d'un élément :

Pour supprimer le deuxième élément (banana à l'index 1) :

unset my_array[1]
echo "${my_array[@]}"  # Output: apple cherry date

3.4. Définir une variable comme un tableau associatif (Bash 4+)

declare -A my_assoc_array=([fruit]="apple" [color]="red")

Cela crée un tableau associatif (également appelé dictionnaire ou table de hachage) en Bash, où les clés (au lieu des index numériques) correspondent à des valeurs spécifiques.

Le drapeau -A fait de my_assoc_array un tableau associatif (paires clé-valeur).

Accéder aux éléments :

echo "${my_assoc_array[fruit]}"   # Output: apple
echo "${my_assoc_array[color]}"   # Output: red

Impression de toutes les clés :

echo "${!my_assoc_array[@]}"   # Output: fruit color

Impression de toutes les valeurs :

echo "${my_assoc_array[@]}"   # Output: apple red

Parcourir le tableau :

for key in "${!my_assoc_array[@]}"; do
    echo "$key => ${my_assoc_array[$key]}"
done

Sortie :

fruit => apple
color => red

Ajouter une nouvelle paire clé-valeur :

my_assoc_array[shape]="circle"
echo "${!my_assoc_array[@]}"   # Output: fruit color shape
echo "${my_assoc_array[shape]}"   # Output: circle

Retirer une clé

unset my_assoc_array[color]
echo "${!my_assoc_array[@]}"   # Output: fruit shape

Vérification si une clé existe :

if [[ -v my_assoc_array[fruit] ]]; then
    echo "Key 'fruit' exists!"
fi

Sortie :

Key 'fruit' exists!

3.5. Exporter une variable vers des sous-interpréteurs (-x)

Cela rend une variable disponible pour les processus enfants.

declare -x my_env_var="Exported Value"

Cette commande crée une variable d'environnement (my_env_var) et la rend disponible pour les processus enfants (comme un nouveau shell Bash).

bash -c 'echo "$my_env_var"'  # Output: Exported Value

Que se passe-t-il si nous n'utilisons pas declare -x ?

my_env_var="Not Exported"
bash -c 'echo "$my_env_var"'

Vous verrez une sortie vide.

Sans -x, la variable existe uniquement dans le shell actuel et n’est pas transmise aux processus enfants.

Alternativement, nous pouvons utiliser export au lieu de declare -x.

export my_env_var="Exported Value"

À la fois declare -x et export rendent les variables disponibles aux sous-shells.

4. Gestion des fonctions avec declare

4.1. Définir des attributs pour les fonctions

Comme je l'ai déjà mentionné, la commande declare vous permet de définir diverses attributs pour les variables et les fonctions. Par exemple, pour rendre une variable locale à une fonction :

my_function() {
    declare -l local_var="This is local"
    echo "$local_var"
}

L'option -l rend local_var locale à la fonction.

Si vous appelez la fonction :

my_function

La sortie sera :

this is local

Même si "This is local" contient des lettres majuscules, declare -l force tous les caractères en minuscules.

4.2. Lister toutes les fonctions (-f)

declare -f

Cela montre toutes les fonctions définies ainsi que leur contenu.

4.3. Lister uniquement les noms de fonctions (-F)

declare -F

Cela montre uniquement les noms des fonctions sans leurs définitions.

4.4. Exporter une fonction

declare -xf my_function

Le drapeau -xf rend my_function disponible pour les processus enfants (par exemple, les scripts ou les sous-interpréteurs).

5. Vérifiez si une variable ou une fonction existe

La commande declare peut également être utilisée pour vérifier si une variable ou une fonction existe :

if declare -p variable_name &>/dev/null; then
    echo "Variable exists"
fi

Remplacez variable_name par le nom réel.

6. Supprimer les attributs

N'oubliez pas que nous utilisons -i lorsque nous déclarons une variable. Nous pouvons utiliser + au lieu de - pour supprimer un attribut. Par exemple :

declare +i num  # Removes the integer attribute from `num`.

Vous pouvez maintenant attribuer un autre attribut (par exemple une chaîne) sans aucune erreur :

num=hello

Pour le vérifier, imprimez la valeur de la variable :

echo $num

Cela devrait afficher hello.

Veuillez noter que declare +i num supprime l'attribut entier mais ne désactive ni ne supprime la variable.

7. Désactivation des variables et fonctions

Nous pouvons supprimer des variables ou des fonctions en utilisant la commande unset.

Pour supprimer une variable :

unset my_var

Pour supprimer une fonction :

unset -f function_name

Exemple : Combinaison de la gestion des variables et des fonctions

L'exemple suivant montre comment declare peut être utilisé à la fois pour les variables et les fonctions :

# Declare an integer variable
declare -i num=10

# Declare a read-only variable
declare -r readonly_var="This cannot be changed"

# Declare a function
my_function() {
    declare -l local_var="This is local"
    echo "$local_var"
}

# List all functions
declare -F

# View the definition of my_function
declare -f my_function

Résumé des options de declare

OptionBut
-aDéclarez un tableau indexé.
-ADéclarez un tableau associatif (Bash 4+).
-iDéclarez une variable entière.
-rDéclarez une variable ou une fonction en lecture seule.
-xExportez la variable ou la fonction vers l'environnement.
-fAfficher la définition d'une fonction.
-FAfficher les noms de toutes les fonctions.
-lConvertissez la valeur en minuscules (pour les variables).
-uConvertissez la valeur en majuscules (pour les variables).
-pAfficher les attributs et la valeur d'une variable.

Conclusion

La commande declare est l'une des commandes utiles dans le scripting Bash avancé. Elle est principalement utilisée pour :

  • Définir et gérer des variables avec des attributs spécifiques (par exemple, entiers, tableaux, en lecture seule),
  • Définir et gérer des fonctions (par exemple, les lister, les afficher ou les exporter),
  • Définir ou supprimer des attributs pour les variables et les fonctions.

J'espère que cela aide.