Portál AbcLinuxu, 12. května 2025 09:11
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 10Problé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.