
Tengo el siguiente script simple. En este script, asigno un valor a una variable global dentro de una función. Puedo ver claramente que el valor se asigna a la variable mediante una declaración de depuración. Sin embargo, cuando hago eco de la variable al final, siempre está vacía.
function getValue()
{
local key=$1
local configFile=$2
keyValuePair="$(egrep "$key" "$configFile")"
if [ ! "$?" -eq 0 ]
then
echo "Cannot find the value for the specifed key"
return 1;
fi
value="$(cut -d"=" -f"2" <<< "$keyValuePair")"
echo "$value"
return 0;
}
function configuer()
{
if [ ! -f "$RMCFGFILE" ]
then
echo "Cannot file RMGCFG file."
return 1;
fi
#Recyclebin configuration
value=$(getValue "recyclebin" $RMCFGFILE)
if [ ! "$?" -eq 0 ]
then
echo "$value"
return 1;
fi
RECYCLEBIN="$value" **#### I am assigning here**
return 0;
}
RECYCLEBIN=
RMCFGFILE="/home/sas/.rm.cfg"
LOCALEFILE=""
CONFIG_RESULT=$(configuer)
if [ ! "$?" -eq 0 ]
then
echo "$CONFIG_RESULT"
exit 1;
fi
echo "Configuration success"
eval echo "Recyclebin: ${RECYCLEBIN}" **##No value**
¿Alguien ve lo que está pasando aquí?
Respuesta1
Estás esperando:
CONFIG_RESULT=$(configuer)
Para asignarle un valor $RECYCLEBIN
porque...
RECYCLEBIN="$value"
... en la configuer()
función. Es cierto que la funciónhaceasigne un valor, $RECYCLEBIN
pero ese valor solo persistirá mientras dure el $(
subnivel )
en el que lo configuró. Va anoaplique cualquier cambio al entorno de su shell principal, que es donde lo llama. Cuando usted:
eval echo "Recyclebin: ${RECYCLEBIN}"
eval
analiza todos sus argumentos en una cadena separada por espacios e intenta ejecutar los resultados como un comando de shell. Entonces "${RECYCLEBIN}"
desaparece porque, en el entorno de shell actual, se configuró por última vez en la ''
cadena nula como:
RECYCLEBIN=
Entonces, al ejecutar la declaración, todo lo que hace es:
echo Recyclebin:
Que funcionalmente no es diferente a...
echo "Recyclebin: ${RECYCLEBIN}"
...de todos modos porque $RECYCLEBIN
está vacío.