首页 > 解决方案 > 当shell变量包含&符号时,MySql查询失败

问题描述

我在 shell 脚本中有一个表变量,其中包含“&”。当我尝试在 shell 脚本中更新表时,查询失败。

我尝试了几个选项来用单引号,双引号,反引号'`'来包含表名(反引号将其中的语句视为shell命令)

还尝试设置以下选项: set define on set escape on

#!/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 1号线

标签: mysqlshell

解决方案


尝试使用带反引号的反斜杠,因为反引号在 shell 中被视为命令替换,并且它们在双引号字符串中进行评估。

你需要避开反引号

"\`市_&_区\`"


推荐阅读