#!/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
block 、循环...)以生成更复杂或可变的 SQL 语句。作为通用解决方案,它具有很好的优势。
关于mysql - 如何在 shell 脚本文件的 MySQL 查询中嵌入 BASH 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42319057/