O valor atribuído dentro de uma variável de função está sempre vazio

1

Eu tenho o seguinte script simples. Neste script, estou atribuindo um valor a uma variável global dentro de uma função. Eu posso ver claramente que o valor está sendo atribuído à variável por meio de uma instrução de depuração. No entanto, quando faço eco da variável no final, está sempre vazia.

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**

Alguém vê o que está errado aqui?

    
por Sas 13.06.2014 / 02:30

1 resposta

2

Você está esperando:

CONFIG_RESULT=$(configuer)

Para atribuir um valor a $RECYCLEBIN porque você ...

RECYCLEBIN="$value"

... na função configuer() . É verdade que a função atribui um valor a $RECYCLEBIN , mas esse valor só persiste durante a duração do $( subshell ) em que você o definiu. Ele não aplicará quaisquer alterações no ambiente do shell pai - que é onde você o chama. Quando você:

eval echo "Recyclebin: ${RECYCLEBIN}"

eval analisa todos os seus argumentos em uma string separada por espaço e tenta executar os resultados como um comando shell. Portanto, "${RECYCLEBIN}" desaparece porque - no ambiente atual do shell - foi definido pela última vez para a string '' null como:

RECYCLEBIN=

Assim, na execução da declaração, tudo o que faz é:

echo Recyclebin:

Que não é funcionalmente diferente de ...

echo "Recyclebin: ${RECYCLEBIN}"

... de qualquer forma porque $RECYCLEBIN está vazio.

    
por 13.06.2014 / 03:12