Bash 5 : Portée des variables - Shell/Batch - Programmation
Marsh Posté le 13-12-2022 à 15:50:53
Il peut y avoir "shadowing" (désolé ) : avec
test2() { |
tu obtiens
bidule dit machin |
Marsh Posté le 13-12-2022 à 21:00:39
Merci pour la précision
Pour ce problème, ça va, je faisais attention à avoir des noms différents dans chaque fonction : en fait, j'ai découvert que je me trompais sur la façon de fonctionner des variables parce qu'à force de me creuser la tête pour trouver des noms différents pour la même variable que je passais d'une fonction à l'autre, j'ai oublié, dans une fonction "fille", d'utiliser le nom que je lui avais donné dans cette même fonction "fille"
J'ai laissé sans faire gaffe le nom donné dans la fonction "mère" et aujourd'hui, en relisant le code, je me dis "bizarre que ça marche alors que j'utilise pas le bon nom de variable".
Ça m'arrange au final : il n'y a pas tant de façons différentes que ça de nommer une variable qui contient un tableau avec les métadonnées d'un livre ou une liste d'images
Il ne me reste plus qu'à relire tous mes scripts récents, pour simplifier un poil les choses
Marsh Posté le 13-12-2022 à 14:55:00
Bonjour,
Jusqu'à peu, je pensais avoir compris la portée des variables dans un script Bash, mais, ça ne semble finalement pas être le cas.
Les variables globales, ça va, sauf si y'a un truc bizarre, elles sont globales donc accessibles dans tout le script.
Par contre, pour les variables locales, je m'étais mis en tête qu'elles n'étaient valables que pour la fonction F1 où elles sont déclarées et que si je voulais les utiliser dans une autre fonction F2, appelée depuis la fonction F1, je devais les passer à la fonction F2 et les récupérer dans des variables locales propres à la fonction F2.
Sauf que ça ne semble pas être le cas et comme j'ai déjà eu des mauvaises surprises par le passé avec les variables, j'aimerais être certain d'avoir bien compris avant de partir bille en tête et de me bouffer un nouveau mur…
Donc, pour résumer :
Un petit script bidon pour illustrer ce que je pense avoir compris : l'appel de la fonction test2 dans la fonction test1 va permettre d'afficher ce que dit bidule, alors que l'appel de cette même fonction test2 en dehors de la fonction test1 va échouer, puisque la variable bidule n'est définie que dans test1.
#!/usr/bin/env bash
test_1() {
local bidule="truc"
test2
}
test2() {
echo "bidule dit ${bidule}"
}
test1
test2
Ce qui donne ce que j'attendais :
bidule dit truc
bidule dit
Est-ce que j'ai maintenant bien compris ou est-ce qu'il y a une subtilité qui attend son heure pour me rendre chèvre avec des situations plus compliquées que ce script bidon ?
Message édité par gabegie le 13-12-2022 à 14:55:49