如何在smb:// URL的密码字段中转义@符号

cod*_*ple 11 bash samba escaping

我正在尝试编写一个bash脚本,我在其中连接到samba服务器,获取用户名和密码,然后说$ username:$ password @ SERVERNAME.

但是,如果密码中包含@,则会失败.有没有办法逃脱bash中的@ out密码?

提前致谢

更新:我正在设置此网络打印机

lpadmin -p PRINTER -v smb://$username:$password@SERVER -E
Run Code Online (Sandbox Code Playgroud)

除了$ password中有@符号的情况外,它有效; $ username和$ passwords变量来自读取标准输入

zwo*_*wol 7

啊,不,这实际上不是引用Bash的问题,而是引用Samba.你有这个:

lpadmin -p PRINTER -v smb://$username:$password@SERVER -E
Run Code Online (Sandbox Code Playgroud)

Bash尽职尽责地扩展到了

lpadmin -p PRINTER -v smb://alice:passw@rd@SERVER -E
Run Code Online (Sandbox Code Playgroud)

然后Samba客户端库认为密码在第一个@符号结束,它应该连接到一个名为的服务器rd@server,不要介意你实际上不能将该名称放在DNS中.

lpadmin来自CUPS,而不是来自Samba(这是它的联机帮助页),并且通过阅读这些文档,我认为您可以使用这种替代语法:

lpadmin -p PRINTER -U "${username}%${password}" -v smb://SERVER -E
Run Code Online (Sandbox Code Playgroud)

不过,我很惊讶,@因为%40不起作用.看起来像samba客户端库中的bug给我.