Files
abonnel-www/7a2f79a2-768c-4682-8640-1888f1ad5a9d/index.md
T
2026-05-19 12:37:29 +02:00

57 lines
1.7 KiB
Markdown

# 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 <commande>`, pas `man`.