我曾尝试在脚本中使用此代码,但它只是创建了反引号内的内容。在本例中,在数据库中创建了"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
发布于 2016-02-24 10:31:28
在mysql查询中,表名为may contain字母数字字符、下划线和美元符号。为了能够使用其他ANSI字符,您必须将名称放在单反引号中。
`table-db`
但在bash中,它们有不同的含义,并用于command substitution。在bash中也有几种类型的字符串--双引号和单引号。它们之间的区别在于,在双引号中执行变量扩展和命令替换,而在单引号中则不执行。
mysql -e 'CREATE DATABASE `table-db`;'
但是在使用双引号时必须对它们进行转义,这样它们就不会被bash解释为命令状态。
mysql -e "CREATE DATABASE \`table-db\`;"
当您想要从变量中获取数据库名称时,您需要将其放在单引号字符串之外,如下所示:
mysql -e "CREATE DATABASE \`$dbname\`;"
或者像这样:
mysql -e 'CREATE DATABASE `'$dbname'`;'
https://stackoverflow.com/questions/35592034
复制相似问题