Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1761 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Bash 5 : Portée des variables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Bash 5 : Portée des variables

n°2435450
gabegie
Posté le 13-12-2022 à 14:55:00  profilanswer
 

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… :o

 

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
mood
Publicité
Posté le 13-12-2022 à 14:55:00  profilanswer
 

n°2435461
kajoux
Posté le 13-12-2022 à 15:50:53  profilanswer
 

Il peut y avoir "shadowing" (désolé :o) : avec

test2() {
  local bidule="machin"
  echo "bidule dit ${bidule}"
}


tu obtiens

bidule dit machin
bidule dit machin

n°2435495
gabegie
Posté le 13-12-2022 à 21:00:39  profilanswer
 

Merci pour la précision :jap:
 
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" :o
 
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". [:canaille]  
 
Ç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 :pfff:
 
Il ne me reste plus qu'à relire tous mes scripts récents, pour simplifier un poil les choses :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Bash 5 : Portée des variables

 

Sujets relatifs
bash : if imbriquésScript bash/python extraire données bdd
[Powershell] Variable objet en paramètre de fonction & ValidateSetLire et déplacer un fichier TAR avec nom alternatif bash
probleme execution docker-compose en script bashOmbre portée sur menu déroulant
Variables dans un Batch / Random[Shell Bash] Utilisation des semaphores pour paralleliser mon script
[BASH] bad substitution sur formatage variable[bash] question sur la portée des variables
Plus de sujets relatifs à : Bash 5 : Portée des variables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR