INSIDE mysqlシェルでは変数は拡張されません。

INSIDE mysqlシェルでは変数は拡張されません。

新しいmysqlユーザーとデータベースを作成する前に、次のことを行いました。

read sps -s 
    # Inputing and saving the sps (password) value.

echo ${sps}
    # sps password value echoed.

mysql -u root -p[PASSWORD]
    mysql>
        CREATE user "test"@"localhost" IDENTIFIED BY "${sps}";

質問

ログインするとmysql -u test -p[SPS_PASSWORD_VALUE]アクセス拒否エラーが発生します。

パスワードは私が与えた値${sps}ではなく、${sps}それ自体です。文字列として

test1が手動で(変数ではなく)パスワードを提供したため、問題が発生したことを「正式に」証明するために${sps} variable not being expanded **inside** mysql shell, and therefore acts as a regular string, I created another user今回はよくログインできました。

質問

mysqlシェルにあるときに変数拡張がない理由は何ですか、この動作を防止するか、少なくともこれに似た動作を得る方法は何ですか?

たぶんこれはバグですか?

ベストアンサー1

いいえ。 MySQL Shellは環境変数を拡張しないからです。ユーザーのパスワードはリテラルtestです${sps}。しかし、Bashに変数を拡張し、結果をMySQLに提供させることができます。

echo "CREATE user \"test\"@\"localhost\" IDENTIFIED BY \"${sps}\";" | mysql -u root -p[PASSWORD]

おすすめ記事