我有一个SQL查询,其中包含:
join (&max_dt1) t3
我想替换&max_dt1
所以:
MAX_DT1="'2017-11-03'"
REPLACE="sed -i 's/&max_dt1/select ($MAX_DT1) as dt/g' $FINAL_QUERY"
cat $FINAL_QUERY | eval $REPLACE
结果:
join (select (2017-05-09) as dt) t3
为什么要删除变量MAX_DT1
的引号?
我的真实代码:
MAX_DT1="'$MAX_DT1'"
echo $MAX_DT1
REPLACE="sed -i 's/&max_dt1/select ($MAX_DT1) as dt/g' $FINAL_QUERY"
echo sed -i "s/&max_dt1/select ($MAX_DT1) as dt/g $FINAL_QUERY
cat $FINAL_QUERY | eval $REPLACE
MAX_DT1首先包含:2017-11-03
答案 0 :(得分:2)
按照这个
$ query="join (&max_dt1) t3"
$ MAX_DT1="'2017-11-03'" # <--- you have to quote the single quotes!!
$ sed "s/&max_dt1/select ($MAX_DT1) as dt/g" <<< $query
join (select ('2017-11-03') as dt) t3
答案 1 :(得分:1)
引号表示您将字符串影响到MAX_DT1变量。它不属于你的字符串。 如果您的变量值必须包含引号,则必须添加它们。 例如:
MAX_DT1="'2017-11-03'"
不幸的是,你的Next REPLACE变量不会有你期望的东西,而后来调用的eval命令也不会起作用,因为它的sed命令格式不正确(如果你保持你的代码这样)
幸运的是,如果以这种方式直接调用sed命令,问题就解决了:
MAX_DT1="'2017-11-03'"
sed -i "s/&max_dt1/select ($MAX_DT1) as dt/g" $FINAL_QUERY