[英]How to embed BASH variable in MySQL query in shell script file
#!/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
理解为变量。 应该使用什么语法来完成这项工作?
我使用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语句。 作为一般解决方案,它具有很好的优势。
您需要从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 文档 :
用引号引起来或转义时,不替换任何参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.