1.7 KiB
Supprimer une fonction shell avec unset
Comment supprimer une fonction en Bash ? Comment effacer, retirer ou désenregistrer une fonction shell ? Comment annuler la définition d'une fonction Bash ? Quelle est la différence entre supprimer une variable et supprimer une fonction avec unset ? Pourquoi man unset ne fonctionne pas ?
En Bash, la commande intégrée unset sert à supprimer des variables, mais aussi des fonctions. Pour cibler explicitement une fonction, on utilise l'option -f (pour function) :
unset -f foo
Quand -f est-il vraiment nécessaire ?
D'après la documentation de Bash, sans option, unset essaie d'abord de supprimer une variable, puis se rabat sur une fonction si aucune variable de ce nom n'existe.
Autrement dit, -f n'est indispensable que si une variable et une fonction portent le même nom. Dans le cas contraire, un simple unset foo suffit.
Exemple complet
# Définition d'une fonction
foo() { echo "bonjour"; }
foo
# → bonjour
# Suppression
unset -f foo
foo
# → bash: foo : commande introuvable
Et voici le cas où -f fait toute la différence :
foo="une variable"
foo() { echo "une fonction"; }
unset foo # supprime la variable
foo # → une fonction (la fonction existe toujours)
unset -f foo # supprime la fonction
Consulter la documentation
unset étant une commande interne à Bash (builtin), elle n'a ni page man unset ni option --help. Sa documentation se consulte avec :
help unset
À retenir
unset -f nomsupprime explicitement une fonction.unset nomsuffit si aucune variable ne porte ce nom.- Pour la doc d'un builtin Bash :
help <commande>, pasman.