Страница 1 из 1
Обнуление переменной после цикла
Добавлено: 2012-05-26 17:47:50
UxN
Здравствуйте господа. Есть проблема.
к примеру:
Код: Выделить всё
a=0
cat file | while read str
do
a=`let a += 1`
echo ${a}
done
echo ${a}
вывод будет вида:
Почему так? Что я делаю не так? Почему после выхода из цикла переменная обнуляется. Как можно избежать подобного ?
Re: Обнуление переменной после цикла
Добавлено: 2012-05-26 23:21:49
kpp
Конструкция While, вызываемая по конвееру, выполняется в дочернем шелле, а из дочернего шелла, как известно, значения переменных передать в родительский невозможно.
Судя по конструкции
вы используете Korn Shell.
Я с ним дела не имел, но для нашего эталонного SH избежать подобного можно так:
Код: Выделить всё
a=0
a=$(cat file | ( while read str
do
a=`expr ${a} + 1`
done
echo $a))
echo $a
Re: Обнуление переменной после цикла
Добавлено: 2012-05-29 18:40:20
FiL
ну, или обойтись без конвеера.
Код: Выделить всё
a=0
while read str
do
a=`let a += 1`
echo ${a}
done < file
echo ${a}