El valor asignado dentro de una variable de función siempre está vacío

El valor asignado dentro de una variable de función siempre está vacío

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 $RECYCLEBINporque...

RECYCLEBIN="$value"

... en la configuer()función. Es cierto que la funciónhaceasigne un valor, $RECYCLEBINpero 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}"

evalanaliza 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 $RECYCLEBINestá vacío.

información relacionada