URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9553
[ Назад ]

Исходное сообщение
"while read fName - эта переменная снаружи не доступна?"

Отправлено Саша Селянин , 02-Окт-12 13:31 
Вот пример кода:

#!/bin/bash
while read fName ; do
    filePvmLib="${fName}"
done <<< "$( find /bin -type f -iname "*bash*" 2>/dev/null )"
echo "Дочерняя fName=${fName}; Из родительского пространства filePvmLib=${filePvmLib};"

Две переменные - filePvmLib и fName. После выхода из цикла fName "уничтожается". Как это правильно объяснить?

Если вызывается другой экземпляр Bash. filePvmLib создаётся и существует в "родительском", в "корневом" экземпляре Bash. Внутри цикла fName также доступна, существует для родителя на равне с filePvmLib, а по выходе fName уничтожается.


Содержание

Сообщения в этом обсуждении
"while read fName - эта переменная снаружи не доступна?"
Отправлено Andrey Mitrofanov , 02-Окт-12 15:28 
> #!/bin/bash
> while read fName ; do
>  filePvmLib="${fName}"
> Как это правильно объяснить?

Зачем это _объяснять_? ... ... Хотя... На!

$ while read fff; do echo "_${fff}_"; xxx=$fff; done < <(echo 1); echo f.$fff x.$xxx
_1_
f. x.1
$ while read fff; do echo "_${fff}_"; xxx=$fff; break; done < <(echo 1); echo f.$fff x.$xxx
_1_
f.1 x.1
$ _


"while read fName - эта переменная снаружи не доступна?"
Отправлено Саша Селянин , 02-Окт-12 23:16 
> Зачем это _объяснять_?

Я по работе использую. Понимать как работают свои инструменты - это правильное стремление. ИМХО.

Если совсем прямо - меня интересует стабильность результата работы этого кода. Интуитивно этот код не вызывает чувства неправильности. Можно придумать, почему логично именно так. Но полезнее(хотелось бы в идеале) таки узнать, что на самом деле.