Portée dynamique
Portée dynamique (en anglais dynamic scoping) : règle de visibilité des variables où ce qu'une fonction voit dépend de l'enchaînement des appels au moment de l'exécution, et non de l'endroit où son code est écrit. En Bash, une variable déclarée local dans une fonction est visible de cette fonction et de toutes celles qu'elle appelle ; une fonction appelée qui lit n trouve la variable locale n de son appelant avant la variable globale.
C'est l'inverse de la portée lexicale de Python, Go ou JavaScript, et la source de collisions discrètes : une fonction utilitaire qui modifie une variable sans la déclarer local écrase celle de son appelant. D'où deux habitudes : déclarer local toute variable de travail, et préfixer les noms internes d'une bibliothèque, en particulier avec les références de nom.