Ubuntuのスクリプトを使用してハイフン文字を含むデータベース名を追加するにはどうすればいいですか?質問する

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

ベストアンサー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'`;'

おすすめ記事