データベース名にはハイフンが含まれているため-
、バッククォートで囲む必要があります。二重引用符で囲まれた Bash 文字列内でこれを正常に行うには、展開のために変数を囲むために、バッククォートをバックスラッシュでエスケープする必要があります。
後で、変数$MYSQL_DB
をユーザー名として再利用します。そのコンテキストでは、のような文字列として単一引用符で囲む必要があります'$MYSQL_DB'
。
mysql -u root -p"$MYSQL_ROOT_PASS" -e "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DB\`; GRANT ALL PRIVILEGES ON \`$MYSQL_DB\`.* TO '$MYSQL_DB'@localhost;"
#------------------------------------------------------------------^^^^^^^^^^^^^^^^^-------------------------------------------^^^^^^^^^^^^
ただし、この実行をテストすると、次のメッセージが表示されます。
1 行目の ERROR 1470 (HY000): 文字列 'losk_net-simple_ru' はユーザー名に対して長すぎます (16 以内にする必要があります)
したがって、同様のエラーが発生した場合は、データベース名とは異なるユーザー名を選択する必要があります。
MySQL の文字列と識別子で使用される引用符の種類については、この質問を参照してください。これは PHP に関連していますが、そのほとんどはここでも関連しています。
一般に、このような状況では、データベース名にa を含めないことをお勧めし-
ます。Bash だけでなく、あらゆるコンテキストで常にバッククォートする必要があります。[0-9,a-z,A-Z$_]
将来の頭痛の種を避けるために、一連の for 識別子に固執してください。