bash – 如何在shell脚本字符串中替换变量
发布时间:2020-12-15 19:08:37 所属栏目:安全 来源:网络整理
导读:我遇到了这个问题吗? 我有一个使用占位符持有SQL的变量: echo $SQLSELECT PX_PROMOTION_ID,PRIORITY,STATUS,EXCLSVE,TYPE,PERORDLMT,PERSHOPPERLMT,TOTALLMT,RSV_INT,PX_GROUP_ID,CAMPAIGN_ID,STOREENT_ID,VERSION,REVISION,EFFECTIVE,TRANSFER,CDREQUIRED
我遇到了这个问题吗?
我有一个使用占位符持有SQL的变量: echo $SQL SELECT PX_PROMOTION_ID,PRIORITY,STATUS,EXCLSVE,TYPE,PERORDLMT,PERSHOPPERLMT,TOTALLMT,RSV_INT,PX_GROUP_ID,CAMPAIGN_ID,STOREENT_ID,VERSION,REVISION,EFFECTIVE,TRANSFER,CDREQUIRED,EXPIRE,LASTUPDATEBY,TO_CHAR(LASTUPDATE,'YYYYMMDD HH24MMSS') AS LASTUPDATE,TO_CHAR(STARTDATE,'YYYYMMDD HH24MMSS') AS STARTDATE,TO_CHAR(ENDDATE,'YYYYMMDD HH24MMSS') AS ENDDATE,TO_CHAR(RSV_TIME,'YYYYMMDD HH24MMSS') AS RSV_TIME,RSV_REAL,TGTSALES,NAME,CODE,RSV_VCH,OPTCOUNTER FROM PX_PROMOTION WHERE LASTUPDATE BETWEEN (SELECT MAX(BATCHSTART) FROM XRPTEBATCHCONTROL) AND TIMESTAMP('$BATCH_END') 我有另一个变量保存值: echo $BATCH_END 2012-11-14 17:06:13 我想用占位符替换值。我对Unix脚本不是特别好,但是我已经尝试过: echo $SQL | sed -e "s/'$BATCH_END/$BATCH_END/g" 但它仍然没有被替换… 谁能帮忙?我想替换占位符,并将最终的字符串保留到$ SQL 我还需要知道如何将输出的值重新输入到变量中,例如,我试过: SQL=`echo "$SQL" | echo "${SQL//$BATCH_END/$BATCH_END}"`
您的脚本中缺少单引号对的结尾。
更改自: echo $SQL | sed -e "s/'$BATCH_END/$BATCH_END/g" 至: echo $SQL | sed -e "s/$BATCH_END/$BATCH_END/g" 更新 – 按照后续评论: 要将上述替换的结果保存回$ SQL,请执行以下操作之一: # Preferred way SQL=$(echo $SQL | sed -e "s/$BATCH_END/$BATCH_END/g") # Old way SQL=`echo $SQL | sed -e "s/$BATCH_END/$BATCH_END/g"` 这被称为command substitution.语法($(…)与反引号的机箱)有效,但首选可以让您进行嵌套。 首选方式:Herestring 这可能比您所关心的更高级,但以下列方式可以节省您不必使用echo的子进程: SQL=$(sed -e "s/$BATCH_END/$BATCH_END/g" <<< $SQL) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |