14.4. Arguments d’une fonction

Les arguments d’une fonction sont référencés dans son corps de la même manière que les arguments d’un programme shell le sont : $1 référence le premier argument, $2 le deuxième, etc., $# le nombre d’arguments passés lors de l’appel de la fonction.

Le paramètre spécial $0 n’est pas modifié : il contient le nom du programme shell.

Pour éviter toute confusion avec les paramètres de position qui seraient éventuellement initialisés dans le code appelant la fonction, la valeur de ces derniers est sauvegardée avant l’appel à la fonction puis restituée après exécution de la fonction.

Le programme shell args illustre ce mécanisme de sauvegarde/restitution :

args
- - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -
	#!/bin/bash
	
	function f
	{
	echo " --- Dans f : \$0 : $0"
	echo " --- Dans f : \$# : $#"
	echo " --- Dans f : \$1 : $1"   => affichage du 1er argument de la fonction f
	}
	
	echo "Avant f : \$0 : $0"
	echo "Avant f : \$# : $#"
	echo "Avant f : \$1 : $1"    => affichage du 1er argument du programme args
	f pierre paul jacques
	echo "Apres f : \$1 : $1"    => affichage du 1er argument du programme args
- - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -

$ args un deux trois quatre
Avant f : $0 : ./args		=> nom du programme
Avant f : $# : 4		=> nombre d’arguments passés à args
Avant f : $1 : un		=> 1er argument passé à args
 --- Dans f : $0 : ./args
 --- Dans f : $# : 3
 --- Dans f : $1 : pierre	=> 1er argument passé à la fonction f
Apres f : $1 : un		=> les arguments passés à args ont été restitués
$

Utilisée dans le corps d’une fonction, la commande interne shift décale la numérotation des paramètres de position internes à la fonction.

argsShift
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	#!/bin/bash
	
	function f
	{
	echo " --- Dans f : Avant 'shift 2' : \$* : $*"
	shift 2
	echo " --- Dans f : Apres 'shift 2' : \$* : $*"
	}
	
	echo Appel : f un deux trois quatre
	f un deux trois quatre
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

$ argsShift
Appel : f un deux trois quatre
--- Dans f : Avant 'shift 2' : $* : un deux trois quatre
--- Dans f : Apres 'shift 2' : $* : trois quatre
$

Qu’elle soit utilisée dans une fonction ou à l’extérieur de celle-ci, la commande interne set modifie toujours la valeur des paramètres de position.

argsSet
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	#!/bin/bash

	function f
	{
	echo " -- Dans f : Avant execution de set \$(date) : \$* : $*"
	set $(date)
	echo " -- Dans f : Apres execution de set \$(date) : \$* : $*"
	}

	echo "Avant f : $*"
	echo Appel : f alpha beta
	f alpha beta
	echo "Apres f : $*"
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

$ argsSet
Avant f : un
Appel : f alpha beta
-- Dans f : Avant execution de set $(date) : $* : alpha beta
-- Dans f : Apres execution de set $(date) : $* : vendredi 18 avril 2014, 16:04:50 (UTC+0200)
Apres f : un	=> l’argument a été convenablement sauvegardé puis restitué
$