Я прочитал это сегодня
«Local может использоваться только внутри функции; это делает имя переменной видимой областью, ограниченной этой функцией и ее дочерними элементами». Автор руководства ABS считает такое поведение ошибкой.
и я придумал этот сценарий
begin () {
local foo
alpha
}
alpha () {
foo=333 bar=444
bravo
}
bravo () {
printf 'foo %3s bar %s\n' "$foo" "$bar"
}
begin
bravo
Вывод
foo 333 bar 444
foo bar 444
Итак, как вы можете видеть, поскольку я не local bar
, это просочилось в глобальную область. Вопросы:
- Является ли локальная переменная доступной для дочерней функции ошибкой или это было только его мнением?
- Есть ли в Bash способ пометить все как локальное, аналогично тому, как
set -a
отмечает все для экспорта? - Если это не удается, есть ли в Bash способ проверить эти утечки глобальных переменных?