Portál AbcLinuxu, 6. května 2024 23:17


Dotaz: BASH-Problém s proměnnýma mimo funkce

2.8.2012 14:16 MM
BASH-Problém s proměnnýma mimo funkce
Přečteno: 212×
Odpovědět | Admin
Ahoj, může mi někdo objasnit tohle? Proč mám na výstupu 2x "Obsah proměnné $VAR je 10"? Přece to poslední echo by mělo vypsat jen "Obsah proměnné $VAR je" nebo ne? Jak tomu jde zamezit a udržet proměnné ve funkcích? Díky
     function fce_a { VAR="10"; }
     function fce_b { fce_a; echo "Obsah proměnné \$VAR je $VAR"; }
     fce_b
     echo "Obsah proměnné \$VAR je $VAR"

     Výsledek
     Obsah proměnné $VAR je 10
     Obsah proměnné $VAR je 10
Problém je v tom, že mám nějaké menu ze kterého volám všechny funkce ale proměnné se přepisují jak se jim líbí. Ve finále zadám
echo "Právě je: $VAR hodin..."
a na výstupu mám
Právě je: soubor byl úspěšně zkopírován hodin...
místo
Právě je: 12:56:89 hodin...

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.8.2012 15:42 NN
Rozbalit Rozbalit vše Re: BASH-Problém s proměnnýma mimo funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prvni echo je soucasti funkce kterou volas na tretim radku, druhe echo je na ctvrtem radku..
2.8.2012 17:44 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: BASH-Problém s proměnnýma mimo funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
„Problém je v tom, že mám nějaké menu ze kterého volám všechny funkce ale proměnné se přepisují jak se jim líbí.“

Ty proměnné jsou proměnné prostředí, tedy jsou to de-facto proměnné globální.
Zkus si, třeba to napoví:
#!/bin/bash

VAR=1

function fce_a {
 VAR=2
 echo " ... fce_a: ${VAR}"
 VAR=3
}

function fce_b {
 local VAR=10
 echo " ... fce_a: ${VAR}"
 VAR=20
}

echo "* START: ${VAR}"
echo "* fce_a:"
fce_a
echo "* after fce_a: ${VAR}"

echo "* fce_b:"
fce_b
echo "* after fce_b: ${VAR}"
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
2.8.2012 19:55 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: BASH-Problém s proměnnýma mimo funkce
A da se s tim neco delat? Ano.

Pokud vam to nevadi z jinych duvodu, muzete tu funkci volat v pod-shellu a jakekoliv zmeny prostredi, ktere tak v ni provedete, nebudou ve skriptu ze ktereho jste ji volal, videt.

BASH take zna lokalni promenne, klicove slovo local...

Jenoze to, co je v puvodnim dotazu ma jeden hak: Pokud byste chtel VAR jako lokalni promennou, tak ji neuvidi uz prvni echo uvnitr druhe funkce. Ale zase globalni promenna je zrejme nezadouci... Jinymi slovy, at se na to divam z jakekoliv strany, neco je tam podezrele.

V kazdem pripade, pod-shell:
     function fce_a { VAR="10"; }
     function fce_b { fce_a ; echo "Obsah proměnné \$VAR je $VAR"; }
     ( fce_b )
     echo "Obsah proměnné \$VAR je $VAR"
Lokalni promenna:
     function fce_a { VAR="10"; }
     function fce_b { local VAR; fce_a ; echo "Obsah proměnné \$VAR je $VAR"; }
     fce_b
     echo "Obsah proměnné \$VAR je $VAR"
V techto podobach udelaji to, po cem jste se ptal... jestli je to to, co jste opravdu chtel, je jina otazka. :)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.