#!/bin/bash
fut=$(date -d "+14 days" +'%Y-%m-%d')
echo $fut
mysql -u user -ppassword base1 << "EOF"
INSERT INTO tableB SELECT * FROM tableA WHERE startdate < $fut;
....many lines of MySQL....
EOF
Mysql引擎不将$fut
理解为变量。应该使用什么语法来使其工作?
答案 0 :(得分:2)
我使用here-document没有问题,但是我想提出另一种可能性稍微冗长的可能性,但是当你可能需要做的不仅仅是替换变量时,它有很多优点:管道函数的输出。
#!/bin/bash
sql_statement()
{
local fut=$(date -d "+14 days" +'%Y-%m-%d')
echo "INSERT INTO tableB SELECT * FROM tableA WHERE startdate < $fut;"
echo "....many lines of MySQL...."
}
mysql -u user -ppassword base1 < <(sql_statement)
在这种特定情况下不需要这样做,但允许函数具有附加逻辑(例如if
块,循环...)以生成更复杂或可变的SQL语句。作为一般解决方案,它具有很好的优势。
答案 1 :(得分:1)
您需要从"
EOF
#!/bin/bash
fut=$(date -d "+14 days" +'%Y-%m-%d')
echo $fut
mysql -u user -ppassword base1 << EOF
INSERT INTO tableB SELECT * FROM tableA WHERE startdate < $fut;
....many lines of MySQL....
EOF
来自bash docs:
引用或转义“限制字符串”时无参数替换。