2012-11-05 5 views
2

J'essaie d'appeler une fonction bash à l'intérieur une autre fonction bash et il ne fonctionne pas comme prévu:Appeler une fonction dans une autre fonction

#/bin/bash 
function func1(){ 
    echo "func1 : arg = ${1}" 
    return 1 
} 
function func2(){ 
    echo "func2 : arg = ${1}" 
    local var=func1 "${1}" 
    echo "func2 : value = $var" 
} 
func2 "xyz" 

et la sortie actuelle est:

Current output : 
func2 : arg = xyz 
func2 : value = func1 

Question: comment puis-je modifier le programme ci-dessus afin d'obtenir la sortie suivante? :

Desired output : 
func2 : arg = xyz 
func1 : arg = xyz 
func2 : value = 1 

Répondre

2

changement func2 définition à ce qui suit:

function func2() { 
    echo "func2 : arg = ${1}" 
    func1 "${1}" 
    local var=$? 
    echo "func2 : value = $var" 
} 
4

Fonctions Bash ne fonctionnent pas de la même manière que des fonctions dans de nombreuses autres langues, ils ne peuvent retourner un nombre entier compris entre 0 et 255. Ceci est saisi en utilisant $? après l'appel de la fonction. Si vous voulez obtenir une autre valeur, par exemple une chaîne, appelez-le dans un sous-shell:

local var=$(func1 "${1}") 

obtiendrez le stdout (à partir echo déclarations) de la fonction dans $var.

Par ailleurs, la syntaxe de la fonction est:

function func1 { ... } 

ou

func1() { ... } 
+0

+1 pour une réponse plus complète. (effaçant le mien) –

+0

Oui c'était une très bonne explication. Merci aussi pour les pointeurs sur la syntaxe de la fonction. – artella

+0

p.s. Si vous vouliez que votre fonction retourne quelque chose de plus grand que 255, comment iriez-vous dans bash? – artella

Questions connexes