繁体   English   中英

如何在shell脚本文件中的MySQL查询中嵌入BASH变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM