Portál AbcLinuxu, 5. prosince 2025 02:01
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:
#!/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}"
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. :)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.