函數變數內部指派的值始終為空

函數變數內部指派的值始終為空

我有以下簡單的腳本。在此腳本中,我為函數內的全域變數賦值。我可以清楚地看到該值是透過調試語句分配給變數的。但是,當我最後回顯該變數時,它始終為空。

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是空的。

相關內容