함수 변수 내부에 할당된 값은 항상 비어 있습니다.

함수 변수 내부에 할당된 값은 항상 비어 있습니다.

다음과 같은 간단한 스크립트가 있습니다. 이 스크립트에서는 함수 내의 전역 변수에 값을 할당합니다. 디버그 문을 통해 값이 변수에 할당되는 것을 명확하게 볼 수 있습니다. 그러나 마지막에 변수를 에코하면 항상 비어 있습니다.

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비어있으니까요.

관련 정보