【问题标题】:how do i add database name with hyphen character using script in ubuntu如何在 ubuntu 中使用脚本添加带有连字符的数据库名称
【发布时间】:2016-06-06 03:29:41
【问题描述】:

我尝试在脚本中使用此代码,但它只是创建了反引号内的内容。在此示例中,在数据库中创建了“echo "table-db"”。它没有在查询中创建带有连字符的文件夹的名称

hyph=`ls -l $DBDIR | egrep '^d' | grep '.-.' | awk '{print $9}'`

dbhype=($hyph)


for dbtry in ${!dbhype[*]}
   do            
        mysql -u$dbUser -p$dbPass -e 'CREATE DATABASE IF NOT EXISTS `echo "table-db"` CHARACTER SET utf8 COLLATE utf8_general_ci';

        echo "Database ${dbhype[$dbtry]} created."

done

【问题讨论】:

  • 我在这个例子中尝试使用“echo”table-db“”因为根据我搜索的内容,反引号只会读取命令,但我实际上想在这种情况下创建名称 table-db 或查询中文件夹的名称。

标签: mysql database bash shell terminal


【解决方案1】:

在mysql查询表名may contain字母数字字符、下划线和美元符号。为了能够使用其他 ANSI 字符,您必须将名称放在单反引号中。

`table-db`

但在 bash 中它们有不同的含义,用于command substitution。在 bash 中还有几种类型的字符串——双引号和单引号。它们之间的区别在于,在双引号中执行变量扩展和命令替换,而在单引号中则不执行。所以你可以在单引号内使用带有mysql语义的反引号

mysql -e 'CREATE DATABASE `table-db`;'

但在双引号中使用时必须对其进行转义,以免 bash 将它们解释为命令替换。

mysql -e "CREATE DATABASE \`table-db\`;"

当您想从变量中获取数据库名称时,您需要将其放在单引号字符串之外,如下所示:

mysql -e "CREATE DATABASE \`$dbname\`;"

或者类似的:

mysql -e 'CREATE DATABASE `'$dbname'`;'

【讨论】:

  • 谢谢你的回答 user2683246 但我也试过这个。但它只创建了一个数据库。只有表-db。查询中的其他名称怎么样,例如:table-db2、table-db3、table-db4 等... 我不能将变量放在反引号内吗?我想将变量“${dbhype[$dbtry]}”放在反引号内,但是当我运行脚本时,只有 ${dbhype[$dbtry]} 被创建为数据库名称,而不是文件夹的名称我的查询
  • 单引号内的变量不会被 shell 扩展。使用双引号。
  • 感谢@user2683246 的想法。我用这个编辑了我的代码,现在它工作了! :) hyph=ls -l $DBDIR | egrep '^d' | grep '.-.' | awk '{print $9}' dbhype=($hyph) for dbtry in ${!dbhype[*]} do mysql -u$dbUser -p$dbPass -e 'CREATE DATABASE IF NOT EXISTS '${dbhype[$dbtry]}' CHARACTER SET utf8 COLLATE utf8_general_ci ;' echo "已创建数据库 ${dbhype[$dbtry]}。"完成
猜你喜欢
  • 2020-05-04
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
相关资源
最近更新 更多