bash はデフォルトでは、関数外と関数内で変数を共有します。 例えば、以下のように関数内で代入を行うと、関数外でセットした値を上書きしてしまいます。
function myfunc {
a=200
}
$ a=100
$ myfunc
$ echo $a
200 ★aの値が変わってる!
関数内だけで有効なローカル変数を扱うには以下のように local
キーワードを付けます。
function myfunc {
local a=200
}
$ a=100
$ myfunc
$ echo $a
100 ★aの値はそのまま