関数変数内に割り当てられた値は常に空です

関数変数内に割り当てられた値は常に空です

次のような簡単なスクリプトがあります。このスクリプトでは、関数内のグローバル変数に値を割り当てています。デバッグ ステートメントによって変数に値が割り当てられていることは明らかです。ただし、最後に変数をエコーすると、常に空になります。

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()関数内。関数内する値を割り当てることはできますが、その値は、それを設定したサブシェル$RECYCLEBINの存続期間中のみ有効です。$()ない変更は、親シェルの環境(呼び出し元)に適用されます。次の場合:

eval echo "Recyclebin: ${RECYCLEBIN}"

evalすべての引数をスペースで区切られた文字列に解析し、その結果をシェル コマンドとして実行しようとします。現在のシェル環境では、次のように"${RECYCLEBIN}"最後に null 文字列に設定されているため、は消えます。''

RECYCLEBIN=

したがって、ステートメントを実行すると、次の処理が実行されます。

echo Recyclebin:

機能的には...と変わりません。

echo "Recyclebin: ${RECYCLEBIN}"

...とにかく$RECYCLEBIN空だから。

関連情報