73 votes

Comment définir une fonction à l'intérieur d'une autre fonction dans Bash ?

J'ai le code suivant

 func1(){
    #some function thing
    function2(){
        #second function thing
    }
}

et je veux appeler function2 mais j'obtiens une erreur function2 : not found

Y a-t-il une solution ?

14voto

Charlie Martin Points 62306

N'emboîtez pas les définitions de fonctions. remplacer par:

 $ cat try.bash 
function one {
  echo "One"
}

function two {
  echo "Two"
}

function three {
   one
   two
}

three
$ bash try.bash 
One
Two
$ 

3voto

Brian Points 71

Si vous imbriquez une fonction, disons fonction2 dans fonction1, elle ne devient disponible qu'une fois que fonction1 est appelée. Certaines personnes pourraient considérer cela comme une fonctionnalité, car vous pouvez faire quelque chose comme "unset function2" à la fin de function1 et sa portée est complètement locale à cette fonction (ne peut pas être appelée d'ailleurs). Si vous souhaitez appeler la fonction ailleurs, il n'est probablement pas nécessaire de l'imbriquer de toute façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X