web-dev-qa-db-ja.com

ubuntuでスクリプトを使用してハイフン文字を含むデータベース名を追加する方法

このコードをスクリプトで使用してみましたが、バックティック内にあるものが作成されました。この例では、「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
13
1312EN

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'`;'
24
user2683246