La commande interne return ne peut retourner qu’un code de retour. Pour récupérer la valeur modifiée par une fonction, on peut :
La manière la plus élégante pour transmettre le résultat retourné par une fonction est l’utilisation par celle-ci d’une variable nameref qui sera initialisée avec le nom d’une variable de la fonction ou corps appelant, nom de variable passé lors de l’appel à la fonction.
La fonction fctnref du programme shell fctnameref définit une variable nameref v qui contiendra la référence de la variable (var) définie dans le corps du programme et dont le contenu sera directement modifié par la fonction. Après exécution de la fonction fctnref, le contenu de la variable var a bien été modifié.
#!/bin/bash # @(#) fctnameref function fctnref { local -n v="$1" v=bonjour } var=coucou echo "AVANT APPEL : $var" fctnref var echo "APRES APPEL : $var"
$ fctnameref AVANT APPEL : coucou APRES APPEL : bonjour $
La substitution de fonction est analogue à la substitution de commande [cf. Chapitre 3, Substitution de commandes] : le résultat de la fonction est écrit sur la sortie standard afin d’être récupéré par l’appelant.
La fonction ajouteCoucou du programme shell substfct prend un argument et lui concatène la chaîne coucou.
#!/bin/bash # @(#) substfct function ajouteCoucou { echo "$1 coucou" # ecriture du resultat sur la sortie standard } echo la chaine est : $( ajouteCoucou bonjour )
$ substfct La chaine est : bonjour coucou $