В Bash локальные переменные должны вызываться явно, иначе они будут рассматриваться как глобальные. Даже внутри функций (, где применяется область действия ).
И какая бы область видимости ни была установлена в последний раз для переменной --, будь то локальная, через явное объявление слова local
, или глобальная через опущение --, будет возвращаться то, что возвращается во время ее вызова через echo
.
Итак, в вашем примере после вызова функции локальная область видимости устанавливается на var1
, поэтому любые изменения этой переменной не сохраняются за пределами функции. Но глобальный остается установленным на var2
, так что изменения в этой переменной остаются.