函数变量内部分配的值始终为空

函数变量内部分配的值始终为空

我有以下简单的脚本。在此脚本中,我为函数内的全局变量赋值。我可以清楚地看到该值是通过调试语句分配给变量的。但是,当我最后回显该变量时,它始终为空。

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

有人看到这里出了什么问题吗?

答案1

你期待的是:

CONFIG_RESULT=$(configuer)

分配一个值,$RECYCLEBIN因为您...

RECYCLEBIN="$value"

...在configuer()函数中。确实有这个功能分配一个值,但该值仅在您设置它的子 shell$RECYCLEBIN的持续时间内持续存在。它会$()不是将任何更改应用于其父 shell 的环境 - 这是您调用它的地方。当你:

eval echo "Recyclebin: ${RECYCLEBIN}"

eval将其所有参数解析为空格分隔的字符串,并尝试将结果作为 shell 命令运行。所以"${RECYCLEBIN}"消失了,因为 - 在当前的 shell 环境中 - 它最后被设置为''空字符串,例如:

RECYCLEBIN=

因此,在执行该语句时,它所做的就是:

echo Recyclebin:

这在功能上与...没有什么不同

echo "Recyclebin: ${RECYCLEBIN}"

...无论如何,因为$RECYCLEBIN是空的。

相关内容