首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash中转义变量

问在bash中转义变量
EN

Stack Overflow用户
提问于 2014-08-10 05:20:51
回答 1查看 69关注 0票数 0

我有以下代码通过命令行创建mysql数据库

代码语言:javascript
复制
dbcommand="create database $dbname;GRANT ALL PRIVILEGES ON $dbname.* TO $dbuser@localhost IDENTIFIED BY '$dbpassw';FLUSH PRIVILEGES;"
mysql -u root -p$pass -e "$dbcommand"

它在大多数情况下运行良好,但是如果$dbname / $dbuser包含一个特殊字符,比如破折号(-),那么$dbcommand就会失败。

即使是特殊角色,我也要如何修复它才能工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-10 06:54:37

在mysql中,只有ASCII:_可以包含在数据库名称中,没有引号的。参见:9.2 Schema Object Names允许的字符在引号标识符中包括完整的基本多语言平面(BMP),但U+0000除外。Id。标识符引号字符是回勾(“`”)。Id。所以在你的情况下你需要:

代码语言:javascript
复制
dbcommand="create database \`$dbname\`;GRANT ALL PRIVILEGES ON \`$dbname\`.* TO $dbuser@localhost IDENTIFIED BY '$dbpassw';FLUSH PRIVILEGES;"
mysql -u root -p${pass} -Be "$dbcommand"

如果由于某种原因,\字符在分配给dbcommand时被删除,那么请使用:

代码语言:javascript
复制
mysql -u root -p${pass} -Be "create database \`$dbname\`;GRANT ALL PRIVILEGES ON \`$dbname\`.* TO $dbuser@localhost IDENTIFIED BY '$dbpassw';FLUSH PRIVILEGES;"

示例:

代码语言:javascript
复制
$ mysql -Be "create database \`myblog-wp\`;"
$ mysql -Be "show databases;"
Database
information_schema
mmedia
myblog-wp
mysql
performance_schema

注意:在bash中,您必须用\来规避回退,以防止它们被认为是命令执行的请求。如果是我,我会将我的数据库命名为weblogwp,而不必担心反勾引号:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25225777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档