【发布时间】:2017-10-05 16:33:53
【问题描述】:
我有一个 Bash 脚本来升级我的数据库架构。
我从终端读取了 MySQL 密码:
echo "Enter MySQL root password."
db_pass=
while [[ $db_pass = "" ]]; do
read -sp "Password: " db_pass
done
echo ""
MYSQL="mysql --force --connect-timeout=90 --host=$db_host -u root -p$db_pass"
但是,如果密码中包含“*”星号等特殊字符,则无法升级架构。我想转义那些特殊字符形式 $db_pass 变量。
【问题讨论】:
-
只需使用单引号:
MYSQL="mysql --force --connect-timeout=90 --host=$db_host -u root -p'$db_pass'"来保护db_pass不被shell 扩展。 -
@randomir,我试过了,但没用。谢谢。
-
尝试执行@randomir 所说的操作,但使用转义的双引号:
MYSQL="mysql --force --connect-timeout=90 --host=$db_host -u root -p\"$db_pass\"" -
另外,请告诉我们您是如何执行该行的。
-
接下来呢?你得到了这个字符串变量
MYSQL,但是如何执行呢?