我正在编写一个用于自动安装和配置系统的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/