问题描述
我有一个表,其中包含一个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。
解决方法
要使其按预期方式工作,sqlplus查询响应应为PATHX
而不是${PATHX}
。解决它的一种方法是替换
PARAM_VALUE=`echo "${PARAM_VALUE}" | tr -d " " | tr -d "\n"`
使用
PARAM_VALUE=`echo "${PARAM_VALUE}" | tr -dc '[:alnum:]\n\r'`
,
是,查询响应为$ {PATHX},这是我需要扩展的环境变量。
您可以使用eval
,但是eval
是邪恶的,如果导出了值,请执行安全的envsubst
:
PARAM_VALUE=$(envsubst <<<"$PARAM_VALUE")