我想使用bash脚本运行mysql命令,但由于重音符号(`)而出现语法错误。
mysql -u root -p -e "GRANT ALL PRIVILEGES ON `testuser\_%` . * TO 'testuser'@'%';"
Let MySQL users create databases, but allow access to only their own databases
bash: testuser_%: command not found...
Enter password:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '* TO 'testuser'@'%'' at line 1
看起来bash会混淆这部分`testuser\_%`
有什么建议吗?
答案 0 :(得分:0)
在shell世界中,如果你遇到分隔符问题,请添加更多反斜杠:
"GRANT ALL PRIVILEGES ON \`testuser\_%\` . * TO 'testuser'@'%';"
这应解决问题。
答案 1 :(得分:0)
逃避反引号,它们用于双引号中的命令替换。
Window {
id: window
width: 640
height: 480
visible: true
Flickable{
id:flick
width : parent.width
height : 300
contentHeight: chartview.height
contentWidth: chartview.width
ChartView {
id: chartview
width: window.width * 2
height: 300
LineSeries {
name: "LineSeries"
axisX: ValueAxis {
min: 0
//max: 200
tickCount: 12
labelFormat: "%.0f"
}
XYPoint { x: 0; y: 0.0 }
XYPoint { x: 1.1; y: 3.2 }
XYPoint { x: 1.9; y: 2.4 }
XYPoint { x: 2.1; y: 2.1 }
XYPoint { x: 2.9; y: 2.6 }
XYPoint { x: 3.4; y: 2.3 }
XYPoint { x: 200.1; y: 3.1 }
}
}
ScrollBar.horizontal: ScrollBar {
id: hbar
hoverEnabled: true
active: hovered || pressed
orientation: Qt.Horizontal
}
}
}
您也可以将MySQL命令放在单引号中,然后不进行替换。您需要将嵌入的引号切换为双引号:
mysql -u root -p -e "GRANT ALL PRIVILEGES ON \`testuser\_%\` . * TO 'testuser'@'%';"
答案 2 :(得分:0)
正如其他人已经回答的那样,反向滴答是对shell的命令替换元字符 - 但只有在将它们放在双引号字符串中时才会出现这种情况。
所以最简单的解决方案是将它们放在单引号字符串中:
mysql -u root -p -e 'GRANT ALL PRIVILEGES ON `testuser\_%` . * TO testuser@%;'
请注意,我省略了user @ host周围的引号。在这种情况下,你不需要它们。 https://dev.mysql.com/doc/refman/5.7/en/account-names.html说:
如果用户名和主机名是合法的,则不需要引用它们作为不带引号的标识符。指定包含特殊字符(例如空格或 - )的user_name字符串或包含特殊字符或通配符(例如。或%)的host_name字符串是必需的;例如,' test-user' @'%。com'。
使用反引号(`),单引号(')或双引号(")引用用户名和主机名作为标识符或字符串。