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"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 -pCela montre toutes les variables et leurs valeurs.
2.2. Lister une variable spécifique
declare -p my_varSortie :
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 errorL’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: 15Le 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 cherryPour 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: cherryParcourir le tableau :
for item in "${my_array[@]}"; do
echo "$item"
doneObtenir la longueur du tableau :
echo "${#my_array[@]}" # Output: 3Ajouter un nouvel élément :
my_array+=("date")
echo "${my_array[@]}" # Output: apple banana cherry dateSuppression 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 date3.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: redImpression de toutes les clés :
echo "${!my_assoc_array[@]}" # Output: fruit colorImpression de toutes les valeurs :
echo "${my_assoc_array[@]}" # Output: apple redParcourir le tableau :
for key in "${!my_assoc_array[@]}"; do
echo "$key => ${my_assoc_array[$key]}"
doneSortie :
fruit => apple
color => redAjouter une nouvelle paire clé-valeur :
my_assoc_array[shape]="circle"
echo "${!my_assoc_array[@]}" # Output: fruit color shape
echo "${my_assoc_array[shape]}" # Output: circleRetirer une clé
unset my_assoc_array[color]
echo "${!my_assoc_array[@]}" # Output: fruit shapeVérification si une clé existe :
if [[ -v my_assoc_array[fruit] ]]; then
echo "Key 'fruit' exists!"
fiSortie :
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 ValueQue 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_functionLa sortie sera :
this is localMê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 -fCela montre toutes les fonctions définies ainsi que leur contenu.
4.3. Lister uniquement les noms de fonctions (-F)
declare -FCela montre uniquement les noms des fonctions sans leurs définitions.
4.4. Exporter une fonction
declare -xf my_functionLe 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"
fiRemplacez 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=helloPour le vérifier, imprimez la valeur de la variable :
echo $numCela 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_varPour supprimer une fonction :
unset -f function_nameExemple : 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_functionRésumé des options de declare
| Option | But |
|---|---|
-a | Déclarez un tableau indexé. |
-A | Déclarez un tableau associatif (Bash 4+). |
-i | Déclarez une variable entière. |
-r | Déclarez une variable ou une fonction en lecture seule. |
-x | Exportez la variable ou la fonction vers l'environnement. |
-f | Afficher la définition d'une fonction. |
-F | Afficher les noms de toutes les fonctions. |
-l | Convertissez la valeur en minuscules (pour les variables). |
-u | Convertissez la valeur en majuscules (pour les variables). |
-p | Afficher 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.
