Variablen in Bash sind normalerweise global. Es spricht aber einiges dafür, sie mit local als lokale Variablen zu deklarieren. Das geht so:
#!/bin/bash
a=1
f() {
local a
a=2
echo $a #=>2
}
f
echo $a #=>1
Variablen müssen also nur einmal in der Funktion als lokal deklariert werden und behalten dann diesen Zustand. Der Vorteil: Ohne globalen Scope sind Namen mehrfach verwendbar, und unerwünschte Nebeneffekte lassen sich leichter ausschließen.