The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как объявить/использовать глобальную переменную? Bash"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Как объявить/использовать глобальную переменную? Bash"  
Сообщение от Fou (??) on 14-Мрт-08, 12:21 
Из дочерних подоболочек хочу изменять переменную, используемую в родительских оболочках. Так чтобы для "родительских" значение сохранялось. Надеюсь правильно сформулировал.

Использую Bash.

export SUM=0
(cat $FILE_NAME) | \
while read COUNTER
do
{
SUM=$(($SUM+$COUNTER))
echo "debug sum=$SUM"
}
done
echo "sum=$SUM"

В результате на экране "debug sum=" есть действительно сумма,
а вот "sum=0" уже ноль.

Как сделать чтобы значение SUM было равно значению, которое было записано в sum внутри цикла?
Чтобы за пределами цикла echo "sum=$SUM" выдавало посчитанную внутри цикла сумму, а не ноль.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как объявить/использовать глобальную переменную? Bash"  
Сообщение от Andrey Mitrofanov on 14-Мрт-08, 13:39 
>do
>{
> SUM=$(($SUM+$COUNTER))
> echo "debug sum=$SUM"

Вставь тут ps -AH>файл , например, и с удивлением узнай, что для пайпов (те, что |) пускается отдельный процесс баша...

>}
>done
>Как сделать чтобы значение SUM было равно значению, которое было записано в
>sum внутри цикла?

С отдельным процессом разве что через SUM="` cat ...|while read ... echo "$SUM"; done|tail -1`"...

>Чтобы за пределами цикла echo "sum=$SUM" выдавало посчитанную внутри цикла сумму, а
>не ноль.

Я сам не знал как. :)) Сейчас "капнул" и сделал -- ура. :D

#!/bin/bash
SUM=0
while read COUNTER
do
{
SUM=$((SUM+COUNTER))
echo "debug sum=$SUM"
}
done < <(echo "1000")
echo "sum=$SUM"

Для защиты невиновных cat был заменён на echo. B)
А для избавления от второго процесса в while - пайп заменён на FIFO.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Как объявить/использовать глобальную переменную? Bash"  
Сообщение от phpcoder email(??) on 14-Мрт-08, 13:41 
>Из дочерних подоболочек хочу изменять переменную, используемую в родительских оболочках.

[...]

В вашей задаче этого не нужно:


export SUM=0

while read COUNTER
do
        SUM=$(($SUM+$COUNTER))
        echo "debug sum=$SUM"
done <$FILE_NAME
echo "sum=$SUM"

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру