LINUX.ORG.RU

bash. Функции и локальные переменные


0

1

Здравствуйте. Нужна помощь. файл test.sh

a () {

local z=1

b

}

b () {

echo $z

}

a

Вопрос в том, почему z ведет себя как глобальная переменная,? Как сделать так, что бы z вела себя как локальная.



Последнее исправление: dmitry-shloma (всего исправлений: 3)

В вашем случае функция b вызывается в области видимости функции a.

#!/bin/sh
var=345
func_a ()
{
local var=123
echo "local: $var"
echo 'invoke func_b from func_a: ' `func_b`
}
func_b ()
{
echo "global: $var"
}


func_a	
func_b

Результат работы:

local: 123
invoke func_b from func_a:  global: 123
global: 345

kostik87 ★★★★★
()

Потому что в твоем случае функция b это {часть функции/подфункция} у a. Проверка банальна:

cat test 
#!/bin/bash

function a () {
local z=1;
echo "\"z\" in function = $z"
}

function b () {
a
echo "${z}"
}

a
b
echo "\"z\" outside function = $z"

# и результаты:
$ sh test 
"z" in function = 1
"z" in function = 1

"z" outside function = 

init_6 ★★★★★
()
Ответ на: Спасибо от dmitry-shloma

Тема закрыта

Извини, не могу за тебя нажать на ссылку [Отметить как решенную].

justAmoment ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.