Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam serdecznie, mam problem z przekazaniem wartości zmiennej w dwóch pętlach
Dla przykładu
zmienna=1000 #Definiuje zmienną kontrolną for ... # Pierwsza pętla (wykonuje się 3 razy) do while ... # druga pętla (wykonuje się 10 razy) do echo $zmienna zmienna=$((zmienna+1)) done done # koniec pierwszej pętli
Mianowicie jak skrypt pierwszy raz wejdzie do pętli while to poprawnie wyświetli wartości od 1000 do 1010, natomiast gdy wejdzie do pętli po raz drugi lub trzeci to zamiast wyświetlać kolejne wartości (1011 do 1030) to wyświetla tak jak za pierwszym razem od 1000 do 1010
Wygląda to jakby po ponownym wykonaniu pętli for zmienna wracała do wartości zadefiniowanej na początku
Offline
nie chodzi o petle for tylko while - ona ogranicza zasieg zmiennych ...
Offline
To tak jak przypuszczałem że po powrocie to pętli for zmienna nie ma wartości z pętli while, jest jakaś możliwość zmiany takiego działania, np. poprzez inną definicję zmiennej? Narazie pokonałem problem poprzez zapisanie wartości do pliku tymczasowego, ale chciałbym nie używać takiego rozwiązania.
Offline
troche namieszalem ... ale juz spiesze z poprawka (tez to przerabialem i ez to rozwiazywalem piszac do pliku, ale przypomniec sobie o co w tym dokladnie biegalo jakos ciezko) ...
nie chodzi nawet o sama petle for - zapewne masz w skrypcie
echo "cos tam cos" | while read f; do
i tutaj lezy problem ze w skutek operowania na przekierowywaniu strumieni taka petla for jest wykonywana w procesie potomnym wzgledem skryptu a nie w samym skrypcie - mamy tutaj problem przekazania zmiennej srodowiskowej do procesu macierzystego
przyklad pokazujacy jak to dziala:
zmienna=1000; ps x -l | tail; echo -e "ttt\nooo" | while read f; do zmienna=$((zmienna+1)); echo " $zmienna"; ps x -l | tail; done; echo $zmienna
Offline
Strony: 1