当 INSIDE mysql shell 时变量不会被扩展

当 INSIDE mysql shell 时变量不会被扩展

在创建新的 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}它本身,作为字符串

陷阱

为了“正式”证明问题是由于${sps} variable not being expanded **inside** mysql shell, and therefore acts as a regular string, I created another usertest1` 手动提供密码(而不是从变量)造成的,这次我可以正常登录。

问题

为什么当我在 mysql shell 中时,没有变量扩展,我如何防止这种行为或至少获得接近这种行为?

也许这是一个错误?

答案1

不能,因为 MySQL Shell 不会扩展环境变量。用户的密码test将是${sps}字面意思。但是你可以让 Bash 扩展变量并将结果输入 MySQL:

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

相关内容