このコードをスクリプトで使用してみましたが、バックティック内のものだけが作成されました。この例では、データベースに「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
ベストアンサー1
MySQLクエリのテーブル名含有することができます英数字、アンダースコア、ドル記号。他の ANSI 文字を使用できるようにするには、名前を単一のバッククォートで囲む必要があります。
`table-db`
しかし、bashではそれらは異なる意味を持ち、コマンド置換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'`;'