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 :
- Variables globales : accessibles partout
- Variables locales : accessibles dans la fonction F où elles ont été déclarées et dans les fonctions appelées dans la fonction F mais pas ailleurs.
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