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




: [/] [] ()
root@serwer:~/temp$./zzz
1
1
2
2

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




: [/] [] ()
root@serwer:~/temp$./zzz
1
1
2
2


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:

: [/] [] ()
funkcja
. /tmp/smieci
echo $zmienna1
echo $zmienna2

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/