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

标签 mysql bash shell variables

#!/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/

相关文章:

mysql - 当日期为空时,SQL 查询中的 Where 子句跳过日期过滤器

MySQL:用户、用户组和组表

mysql - 在mysql中使用正则表达式

bash - 不带标点符号显示当前日期和时间

c - 执行 ("/bin/sh", 0, 0);在管道中

ruby - Bash for 循环只有在从 ruby​​ 脚本运行时才会出现语法错误

php - 将 phpmyadmin 国家/地区 ISO 代码转换为变量定义值 PHP

linux - 从bash脚本启动Shrewsoft

node.js - git bash 找不到模块 npm-cli.js

bash - 如何扩展包含文本和其他变量混合的变量?