14.7. Transmission du résultat d'une fonction

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 :

14.7.1. Utilisation d'une variable nameref

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 
$ 

14.7.2. Substitution de fonction

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
$