当shell变量包含&符时,MySQL查询失败

时间:2019-05-08 11:40:56

标签: mysql shell

我在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行的错误1064(42000):您的SQL语法有错误;   检查与您的MySQL服务器版本相对应的手册   在'&_District set Actual ='0.4',Normal ='0.1'附近使用正确的语法,   Dep_Per ='340%',Cat ='LE',其中Date =''在第1行

3 个答案:

答案 0 :(得分:2)

尝试将反斜杠与反斜杠一起使用,因为反斜杠在shell中被认为是命令替换,并且它们都用双引号引起来。

您需要避开反引号

“ \`City _&_ District \`”

答案 1 :(得分:0)

使用时可以在表名周围使用`(而不是'或“)

答案 2 :(得分:0)

在表变量中反引号起作用之前添加反斜杠