Freesco, NND, CDN, EOS http://forum.freesco.pl/ |
|
Przekazywanie zmiennych do funkcji w bash'u http://forum.freesco.pl/viewtopic.php?f=22&t=8672 |
Strona 1 z 1 |
Autor: | adi [ czwartek, 25 sierpnia 2005, 12:29 ] |
Tytuł: | Przekazywanie zmiennych do funkcji w bash'u |
Mam następujący problem, mam funkcję w bash'u, która ustawia wartość zmiennej A. Po wywołaniu tej funkcji jest mi potrzebna ta zmieniona przez funkcję wartośc A. Niestety po wyjściu z funkcji jest ustawiana jej pierwotna wartość (jeżeli była zdefiniowana wcześniej) Jak to zrobić w bash'u? P.S. Nie chodzi mi o wysłanie zmiennej do pliku na dysku tylko o przekazanie zmienionej wartości do funkcji wywołującej. |
Autor: | adi [ niedziela, 28 sierpnia 2005, 09:57 ] |
Tytuł: | |
Rozumiem, że nikt nie wie jak to się robi? |
Autor: | czerwo [ niedziela, 28 sierpnia 2005, 10:10 ] |
Tytuł: | |
ja zabardzo nie rozumiem co chcesz zrobic ale przeciez starczy a=12 echo $a a=$[a + 5] echo $a no i zmienia wiec nie wiem o co ci chodzi pokaz jak to masz zrobione to sie cos wymysli |
Autor: | Mis' [ niedziela, 28 sierpnia 2005, 12:41 ] |
Tytuł: | Re: Przekazywanie zmiennych do funkcji w bash'u |
adi pisze: Mam następujący problem, mam funkcję w bash'u, która ustawia wartość zmiennej A. Po wywołaniu tej funkcji jest mi potrzebna ta zmieniona przez funkcję wartośc A. Niestety po wyjściu z funkcji jest ustawiana jej pierwotna wartość (jeżeli była zdefiniowana wcześniej) Jak to zrobić w bash'u?
#!/bin/sh funkcja() { jakies polecenia } zmienna=`funkcja` echo "$zmienna" spróbuj tak jak powyżej... nie sprawdzałem ale powinno zadziałać. w prostych przypadkach. Problem może chyba wystąpić jeśli $zmienna zawierałaby np. listę... |
Autor: | adi [ niedziela, 28 sierpnia 2005, 22:41 ] |
Tytuł: | |
Dzięki mis' - spróbuję, ale jak mam więcej zmiennych to co wtedy ?? Akurat potrzebuję dwie. Wiem, mogę dwie funkcje napisać, ale ona robi jedną rzecz, także to byłoby trochę bez sensu. ![]() Poza tym, u mnie jest tak: #!/bin/bash zmienna1 = 1 zmienna2 = 1 funkcja () { zmienna1=2 zmienna2=2 } funkcja echo $zmienna1 echo $zmienna1 i Tutaj dostaję 1 i 1 a potrzebuję dostać 2 i 2 ![]() |
Autor: | Mis' [ niedziela, 28 sierpnia 2005, 22:57 ] |
Tytuł: | |
adi pisze: Dzięki mis' - spróbuję, ale jak mam więcej zmiennych to co wtedy ?? Akurat potrzebuję dwie. Wiem, mogę dwie funkcje napisać, ale ona robi jedną rzecz, także to byłoby trochę bez sensu.
![]() Poza tym, u mnie jest tak: #!/bin/bash zmienna1 = 1 zmienna2 = 1 funkcja () { zmienna1=2 zmienna2=2 } funkcja echo $zmienna1 echo $zmienna1 i Tutaj dostaję 1 i 1 a potrzebuję dostać 2 i 2 ![]() znów bez testów. imho albo dajesz osobną funkcję dla każdej zmiennej, albo tę samą funkcję wywołujesz wielokrotnie z różnymi parametrami i na podstawie tych prametrów określasz zmienną. ja jednak próbowałbym exportować zmienne (przynajmniej od tego bym zaczął) w funkcji... choć mam niejakie wrażenie że to nie tędy droga... |
Autor: | zciech [ niedziela, 28 sierpnia 2005, 23:33 ] |
Tytuł: | |
#!/bin/sh zmienna1=1 zmienna2=1 funkcja () { zmienna1=2 zmienna2=2 echo zmienna1=$zmienna1>/tmp/smieci echo zmienna2=$zmienna2>>/tmp/smieci } echo $zmienna1 echo $zmienna2 funkcja . /tmp/smieci echo $zmienna1 echo $zmienna2 |
Autor: | MAC!EK [ poniedziałek, 29 sierpnia 2005, 01:49 ] |
Tytuł: | |
u mnie też ok [root@Komp_2 tmp]# cat test ; sh test #!/bin/bash zmienna1=1 zmienna2=1 funkcja () { zmienna1=2 zmienna2=2 } funkcja echo $zmienna1 echo $zmienna1 2 2 |
Autor: | Mis' [ poniedziałek, 29 sierpnia 2005, 02:11 ] |
Tytuł: | |
zciech pisze: #!/bin/sh zmienna1=1 zmienna2=1 funkcja () { zmienna1=2 zmienna2=2 echo zmienna1=$zmienna1>/tmp/smieci echo zmienna2=$zmienna2>>/tmp/smieci } echo $zmienna1 echo $zmienna2 funkcja . /tmp/smieci echo $zmienna1 echo $zmienna2 pozwól że zadam niedyskretne pytanie - a jak te zmienne będziesz modyfikował(*)? bo bez sed czy awk będzie ciężko... (*) zmienna jaka jest każdy widzi... jak kobieta - zmienna ![]() |
Autor: | zciech [ poniedziałek, 29 sierpnia 2005, 12:09 ] |
Tytuł: | |
To pytanie do mnie? Jeli tak to: Nie mam zamiaru niczego modyfikowac to bedzie robila funkcja adi-ego, co kolwiek ma robic niech robi byle na koncu miala że a=cos co obliczyla b=drugie cos co obliczyla echo zmienna1=$a>/tmp/smieci echo zmienna2=$b>>/tmp/smieci i co ma do tego sed czy awk ? Pytanie nie bylo jak modyfikowac zmiene tylko jak przekazac wartosc zmienych z funkcji. Nie twierdze ze to najlepsze rozwizanie ( w koncu potrzebny jest dodatkowy plik), nie jestem wybitnym specjalistą od shela i basha ADI Cytuj: i Tutaj dostaję 1 i 1 a potrzebuję dostać 2 i 2 Sad
Bardzo dziwne ale podobnie jak maciek ja tez dostaje 2 i 2 ![]() Chodz w swietle ostatnich badan wynika, że funkcja przekazuje modyfikowane zmienne ![]() |
Autor: | Mis' [ poniedziałek, 29 sierpnia 2005, 13:50 ] |
Tytuł: | |
zciech pisze: Nie mam zamiaru niczego modyfikowac to bedzie robila funkcja adi-ego, co kolwiek ma robic niech robi byle na koncu miala że a=cos co obliczyla b=drugie cos co obliczyla echo zmienna1=$a>/tmp/smieci echo zmienna2=$b>>/tmp/smieci i co ma do tego sed czy awk ? Może błędnie założyłem, że w /tmp/smieci robisz "magazyn" zmiennych, tam piszesz i stamtąd je pobierasz. I wtedy jeśli mamy więcej niż jedną zmienną modyfikacja dowolnej zmiennej wymaga awk lub seda działąjącego na tym pliku. A to nie jest najlepszym rozwiązaniem ze względu na dodatkowe procesy, które musisz wywołać i niepotrzebną komplikację scriptu... |
Autor: | MAC!EK [ poniedziałek, 29 sierpnia 2005, 16:38 ] |
Tytuł: | |
Misiu moim zdaniem Zciech chciał po prostu pokazać co zawiera zmienna w przed wykonanim, i po wykonaniu funkcji. |
Autor: | Mis' [ poniedziałek, 29 sierpnia 2005, 17:04 ] |
Tytuł: | |
MAC!EK pisze: Misiu moim zdaniem Zciech chciał po prostu pokazać co zawiera zmienna w przed wykonanim, i po wykonaniu funkcji.
pomyśl co robi ten fragment: |
Autor: | MAC!EK [ poniedziałek, 29 sierpnia 2005, 23:29 ] |
Tytuł: | |
no tak chyba to przeoczyłem |
Strona 1 z 1 | Strefa czasowa UTC+2godz. |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |