mysql - 如何最好地在 mysql 命令中使用 bash 中声明的变量?

标签 mysql bash mariadb

我正在编写一个用于自动安装和配置系统的bash脚本,我需要能够从脚本中声明的变量设置mysql的root密码,但我无法让它工作。

read -p "Password `echo $'\n> '`" mysql_passwd

mysql --defaults-file=/etc/mysql/debian.cnf mysql -Bse 'UPDATE user SET password=PASSWORD("$mysql_passwd") WHERE User="root";flush privileges;'

当从不带变量的脚本运行命令时(直接在其中直接输入密码),它可以工作:

mysql --defaults-file=/etc/mysql/debian.cnf mysql -Bse 'UPDATE user SET password=PASSWORD("password") WHERE User="root";flush privileges;'

尝试过以下方法:

PASSWORD("$mysql_passwd") 

PASSWORD("${mysql_passwd}")

PASSWORD('$mysql_passwd')

没有错误消息,root 密码没有更改。

感谢您的阅读。

最佳答案

你必须把引号反过来。首先是双引号,然后是单引号:

mysql --defaults-file=/etc/mysql/debian.cnf mysql -Bse "UPDATE user SET password=PASSWORD('$mysql_passwd') WHERE User='root';flush privileges;"

当用单引号转义某些内容时,变量名称不会被解析。

在这里查看差异:

# a=asdf
#
# echo "'$a'"
'asdf'
# echo '"$a"'
"$a"

关于mysql - 如何最好地在 mysql 命令中使用 bash 中声明的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54342628/

相关文章:

php - 更新div中的数据

linux - 如何安全地抑制命令输出?

mysql - 为什么我的查询没有显示错误,但也返回零行?

php - 如何使用 MySQL 和 PHP 打印单个单元格的值?

mysql - 为什么我不能对此形成外键?

bash - 在 bash 中根据黑名单移动文件时遇到问题

Spring 正在失去与数据库的连接,并且无法恢复或重新连接

mysql - mariadb 主到主复制自动增量设置

mysql - 在Mysql中插入日期(代号一)

bash - 为什么 shell 脚本中的反引号不能帮我 cd 到一个目录