mysql - 当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号线
解决方案
尝试使用带反引号的反斜杠,因为反引号在 shell 中被视为命令替换,并且它们在双引号字符串中进行评估。
你需要避开反引号
"\`市_&_区\`"
推荐阅读
- batch-file - Ping 主机特定时间并将输出存储在文件中
- tomcat - 使用 bitbucket 管道部署战争
- python - ModuleNotFoundError:没有名为“win32crypt”的模块
- vulkan - 在vulkan中同步顶点缓冲区?
- ms-access - Microsoft Access 空白不是空白
- javascript - 如何访问子类组件模板中的超类属性?角
- dart - TextField 点击更改 Flutter 中的切换
- android - 如何在 Firebase Firestore 中使用查询
- python - 如何在odoo上重新创建失败的邮件
- flutter - FloatingActionButton onPressed 未触发