【问题标题】:drop database via bash with dash in database-name通过 bash 在数据库名称中使用破折号删除数据库
【发布时间】:2016-06-06 09:56:52
【问题描述】:

我在脚本中有一个变量,其中包含文件夹名称列表,名称中带有破折号

DBDIR="some directory"
dbdash=`ls -l $DBDIR | egrep '^d' | grep '.-.' | awk '{print $9}'`

我想删除每个同名的数据库和变量“dbdash”中的文件夹

dbhype=($dbdash)
    for dbtry in ${!dbhype[*]}
        do            
            mysqladmin -u$dbUser -p$dbPass 'drop database if exists `'${dbhype[$dbtry]}'` CHARACTER SET utf8 COLLATE utf8_general_ci;'
    done

但是运行脚本后就出现了这个错误

mysqladmin: Unknown command: 'drop database if exists folder_name CHARACTER SET utf8 COLLAT'

如何使用脚本删除这些数据库?请帮忙。

【问题讨论】:

  • 不要解析ls,也不要尝试将文件列表存储在平面字符串中。 cd "$DBDIR"; dbhype=( *-*/ )

标签: mysql database bash shell terminal


【解决方案1】:

反引号用于执行命令;您只想引用该值(尽管您构造 dbhype 的方式,引用为时已晚,对您没有任何好处)。

cd "DBDIR"
for dbtry in *-*/; do
    mysqladmin -u "$dbUser" -p "$dbPass" "drop database if exists '$dbtry'"
done

【讨论】:

  • 感谢@chepner 的回答。我尝试使用它并对其进行了一些编辑。我用这个:mysql -u$dbUser -p$dbPass -e 'drop database if exists '$dbtry'' 而不是:mysqladmin -u "$dbUser" -p "$dbPass" "drop database if exists '$dbtry'",它起作用了!
猜你喜欢
  • 2015-05-07
  • 1970-01-01
  • 2013-01-02
  • 2013-01-15
  • 2017-04-04
  • 1970-01-01
  • 2016-04-13
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多