首页 > 解决方案 > shell变量的双重扩展

问题描述

我有一个包含 env 变量的表,我需要从 shell 脚本中获取变量的值并导出另一个 java 实用程序:

    command="SELECT param_value FROM tableX WHERE param_name='ABCD';"
    #This param_value is ${PATHX} and PATHX is /home/users/pathx

    PARAM_VALUE=`sqlplus -s $CONN_STRING <<- END
    SET head off;
    set feedback off;
    ${command}
    exit;
    END`

    echo ${PARAM_VALUE} | grep -q "ERROR"
    if [ $? -eq 0 ]
    then
            echo "Failed in fetching param_value "
            exit 1
    else
            #Trimming the value fetched from DB
            PARAM_VALUE=`echo "${PARAM_VALUE}" | tr -d " " | tr -d "\n"`
            echo "Value fetched from DB=${PARAM_VALUE}" 
            #This prints ${PATHX}
            export PATH_VALUE="${PARAM_VALUE}" 
            #This is exporting PATH_VALUE as ${PATHX} instead of /home/users/pathx - WHICH IS WHERE I NEED HELP
            #If I put directly export PATH_VALUE="${PATHX}", it exports the value correctly as /home/users/pathx
    fi

搜索选项后,我尝试了以下各种选项,但失败了:

export PATH_VALUE="${PARAM_VALUE}"
export PATH_VALUE=`eval echo "\$${PARAM_VALUE}"`
export PATH_VALUE=$(eval \$$PARAM_VALUE)
export PATH_VALUE=${$PARAM_VALUE}
export PATH_VALUE=${!PARAM_VALUE}
export PATH_VALUE=`echo ${PARAM_VALUE}`
export PATH_VALUE=`expr ${PARAM_VALUE}`

请建议在这种情况下可以做些什么来导出实际的扩展值 - /home/users/pathx。

标签: shellvariablesunixexpansion

解决方案


为了让它按您期望的方式工作,sqlplus 查询响应应该是PATHX而不是${PATHX}. 解决它的一种方法是更换

PARAM_VALUE=`echo "${PARAM_VALUE}" | tr -d " " | tr -d "\n"`

PARAM_VALUE=`echo "${PARAM_VALUE}" | tr -dc '[:alnum:]\n\r'`

推荐阅读