# 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*) : ```bash 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 ```bash # 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 : ```bash 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 : ```bash help unset ``` ## À retenir - `unset -f nom` supprime explicitement une fonction. - `unset nom` suffit si aucune variable ne porte ce nom. - Pour la doc d'un builtin Bash : `help `, pas `man`.