shell - 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。
解决方案
为了让它按您期望的方式工作,sqlplus 查询响应应该是PATHX
而不是${PATHX}
. 解决它的一种方法是更换
PARAM_VALUE=`echo "${PARAM_VALUE}" | tr -d " " | tr -d "\n"`
和
PARAM_VALUE=`echo "${PARAM_VALUE}" | tr -dc '[:alnum:]\n\r'`
推荐阅读
- c# - EF Core 查询优化:我可以在 List 上使用 Contains
? - javascript - 如何在反应中使用“切片”功能?
- javascript - React 开发工具显示数据状态,控制台显示为空
- python - django postagedb 命令 refresh_from_db 导致 MemoryError 或 .DatabaseError: out of memory for query result
- html - 内容不够溢出时如何粘底?
- excel - 在 Excel 中查找今天和特定日期之间的月数
- python - 在 For 循环中更新字典中的变量
- javascript - webcomponents 中允许的页面上的非唯一 ID
- swift - 如何通过 UIButton 从 DetailViewController 将数据发送到 TableViewController?
- android - 打开蓝牙启动 MediaBrowserServiceCompat