Freesco, NND, CDN, EOS

http://www.freesco.pl
Dzisiaj jest piątek, 26 kwietnia 2024, 00:12

Strefa czasowa UTC+2godz.




Nowy temat Odpowiedz w temacie  [ Posty: 23 ]  Przejdź na stronę Poprzednia  1, 2
Autor Wiadomość
 Tytuł:
Post: czwartek, 21 grudnia 2006, 18:35 
Offline
Użytkownik

Rejestracja: czwartek, 3 października 2002, 16:23
Posty: 271
Lokalizacja: Częstochowa
Mam jeszcze mały problemik, a mianowicie jest taki programik przykładowy:

: [/] [] ()
#!/bin/sh
#
a=0;
ls /etc/ | while read plik;
do
    echo w petli: $a;
    a=55;
done;
#
echo po za petla: $a;


I teraz tak, mamy na poczatku a=0, później w pętli while na początku pokazuje tą wartość czyli 0 i zmienia się jej wartość na 55, w następnym kroku pokazuje a=55. Wszystko OK. Ale po zakończeniu tej pętli, wyświetlam wartość a i a=0 :[.
Dlaczego a=0 a nie 55??
Co zrobić żeby na koniec programu wartość a wynosiła tyle co w pętli while??


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: czwartek, 21 grudnia 2006, 18:44 
Offline
PGF

Rejestracja: piątek, 25 lutego 2005, 18:22
Posty: 1430
Lokalizacja: Elbląg
Też się kiedyś z tym borykałem i z tego, co pamiętam - NIE DA SIĘ, pętla while już tak ma.
Nie pamiętam już jak to obszedłem.

====== EDIT =======
Przypomniałem sobie - zrób tak:
: [/] [] ()
#!/bin/sh
#
a=0;
ls /etc/ | ( while read plik;
#          ^                 NAWIAS !!!
do
    echo w petli: $a;
    a=55;
done;
#
echo po za petla: $a; )
#                     ^      NAWIAS !!!

Chodzi o to, że jeżeli robisz potok, to pętla while jest wykonywana w subshellu, czyli w osobnej instancji shella, która kończy swój żywot na słowie kluczowym done. Czyli zmienna $a poza while;do...done i zmienna $a w obrębie while;do...done to dwie zupełnie różne zmienne ! Dokładając nawiasy "przedłużasz żywot" subshella, na którego kierujesz potok. Oczywiście za nawiasem zmienna $a znowu będzie miała taką wartość, jaką miała przed wywołaniem subshella, czyli 0.

_________________
F33/F07,F11,F13,F17
ObrazekObrazek


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: piątek, 22 grudnia 2006, 00:36 
Offline
Użytkownik

Rejestracja: czwartek, 3 października 2002, 16:23
Posty: 271
Lokalizacja: Częstochowa
Heh, od wielu osób dziś usłyszałem "nie da się", a tu proszę, jednak się da :).
Dzięki.


Na górę
 Wyświetl profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat Odpowiedz w temacie  [ Posty: 23 ]  Przejdź na stronę Poprzednia  1, 2

Strefa czasowa UTC+2godz.


Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 53 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Technologię dostarcza phpBB® Forum Software © phpBB Group
Hosting: Compus-Net
RobertKonik.pl