【发布时间】:2019-05-08 11:40:56
【问题描述】:
我在 shell 脚本中有一个包含“&”的表变量。当我尝试在 shell 脚本中更新表时,查询失败。
我尝试了几个选项来用单引号、双引号、反引号'`'来包含表名(反引号将其中的语句视为 shell 的命令)
还尝试设置以下选项: 设置定义 设置转义
#!/bin/bash
Table='City_&_District'
mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF
update $Table set Actual='$Actual', Normal='$Normal', Dep_Per='$Dep', Cat='$Cat' where Date='$Date';
EOF
如果我输入表名称为:'City',则查询成功 如果我将表名输入为:'City_&_District',则查询失败
第 2 行的 ERROR 1064 (42000):您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册 在 '&_District set Actual='0.4', Normal='0.1', Dep_Per='340%', Cat='LE' where Date='' at line 1
【问题讨论】:
-
如果您的表名包含特殊字符,您应该用反引号将其引用。
update `$Table` ... -
反引号在这种情况下不起作用
-
正如我们从接受的答案中看到的那样,它们确实有效。如何在 shell 命令中传递它们 - 是另一个问题:escape-backquote-in-a-double-quoted-string-in-shell