我在使用带有特殊字符(例如 $ )的密码时遇到了一些麻烦bashshell 脚本。
我的 shell 脚本是:
read -s -p "Password : " bindDNPass
ldapadd -H ldap://localhost -x -w $bindDNPass -D "dn=cn=Admin" -f /tmp/file.ldif
密码可能类似于 $Something18$。
嗯,命令
ldapadd -H ldap://localhost -x -W -D "dn=cn=Admin" -f /tmp/file.ldif`
要求我的$Something18$
,并且工作正常。
但如果我尝试
ldapadd -H ldap://localhost -x -w $Something18$ -D "dn=cn=Admin" -f /tmp/file.ldif
它不起作用。我猜它正在尝试解决变量$Something18,
所以我尝试了\$Something18$
, \$Something18\$,
\\\$Something18$
,...但它一直失败...
我能怎么做? (无需更改密码...)
将其放在双引号中并转义$
符号避免特殊解释shell
,
ldapadd -H ldap://localhost -x -w "\$Something18\$" -D "dn=cn=Admin" -f /tmp/file.ldif
(or) [更多推荐]
将其括在单引号内,让 shell 将其视为文字字符串而不扩展它,
ldapadd -H ldap://localhost -x -w '$Something18$' -D "dn=cn=Admin" -f /tmp/file.ldif
来自man bash
page,
将字符括在双引号中可保留引号内所有字符的字面值,与$, , \, 和, 的例外情况
历史扩展已启用,!。这
字符 $ 并在双引号内保留其特殊含义. The 仅当后跟以下字符之一时,反斜杠才保留其特殊含义:$、`、"、\ 或 。双引号可以在双引号内引用,方法是在双引号前面加上反斜杠。如果启用,将执行历史扩展,除非!出现在双引号中的内容使用反斜杠进行转义。 ! 前面的反斜杠没有被删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)