转义变量mysql密码

转义变量mysql密码,mysql,bash,escaping,Mysql,Bash,Escaping,我有一个以空格开头的mysql密码。我想把这个密码放到一个变量中,然后用它在bash脚本中连接 这很好: mysql -u me -p' examplepw' 但这并不是: pw=" examplepw" mysql -u me -p'$pw' 因为单引号使变量名被逐字解释(即mysql不能将字符串$pw识别为有效密码) 如何使用变量来保存需要转义的mysql密码?啊,我刚刚找到了解决方案:终止单引号,并用双引号连接引用的变量: mysql -u me -p''"$pw"'' 只要使用环境

我有一个以空格开头的mysql密码。我想把这个密码放到一个变量中,然后用它在bash脚本中连接

这很好:

mysql -u me -p' examplepw'
但这并不是:

pw=" examplepw"
mysql -u me -p'$pw'
因为单引号使变量名被逐字解释(即mysql不能将字符串
$pw
识别为有效密码)


如何使用变量来保存需要转义的mysql密码?

啊,我刚刚找到了解决方案:终止单引号,并用双引号连接引用的变量:

mysql -u me -p''"$pw"''

只要使用环境变量,就可以将密码存储在
MYSQL\u PWD
中。MySQL将从这里开始:

export MYSQL_PWD=" examplepw"
mysql -u me

${}
展开变量

PASS=" 12345678"
mysql -u me -p"${PASS}"

在这种情况下,
${PASS}
被扩展到
12345678

请参见:它是。但是这很奇怪,但是
mysql-ume-p“$pw”
实际上并没有取消最后的评论
mysql-ume-p“$pw”
同样有效。这是我尝试的第一件事。一定是打字错误:P@mulllhausen,你说得对。但是,使用
${}
扩展变量是安全的。有时,我们需要将变量与其他变量混合。像
“${VAR}SUFFIX”
,而不是
“$VARSUFFIX”
单引号在这里没有任何用处;把它们拿走,谢谢你!这里终止的单引号使它工作。任何其他组合都不能帮助我保护密码,但这是有效的。单引号有助于保护带有特殊字符的密码。您需要导出
MYSQL\u PWD
变量,或者将赋值作为
MYSQL
命令的前缀(因此它仅在该命令中定义)。请注意,prefix方法比将其导出到从该shell运行的所有程序要安全得多。它也比使用
-p
命令行选项更安全,因为命令参数被视为公共信息,可以通过例如
ps
查看。环境变量不是。安全注意:这种指定MySQL密码的方法必须被认为是非常不安全的,不应该使用。某些版本的ps包含显示正在运行的进程的环境的选项。在某些系统上,如果您设置MYSQL_PWD,您的密码将向运行ps的任何其他用户公开。即使在没有此类ps版本的系统上,假设没有其他方法供用户检查流程环境也是不明智的。来源:@Cyrus Aui,环境变量的暴露仅适用于一些旧的Linus系统。Linux(和其他一些操作系统)将环境变量公开为/proc/[PID]/environ,但权限设置为只有进程所有者才能读取。如果
ps
是SUID root,并且读到它本身不检查权限,就可以打印所有进程的环境。但我认为这个错误已经修复了相当长一段时间了。在任何情况下,这都比将密码作为参数传递要好,因为在任何类似unix的操作系统上都可以通过
ps
查看密码。