如何在bash中转义“@”符号?

8

我正在尝试在bash中添加具有身份验证参数的代理,其中我的密码包含一个@符号。在bash中添加带有身份验证的代理的语法如下:

export http_proxy=http://username:password@host:port_no/

因此,每当我尝试使用带有 @ 的密码时,使用此代理的应用程序会尝试连接密码中跟随 @ 符号的字符串。
例如,如果我的密码是p@ssword,主机是proxy.college.com,应用程序会尝试连接ssword@proxy.college.com
我已经尝试使用\转义@符号,但这并没有解决问题。如何在不更改密码的情况下使其正常工作?
注意:此问题与如何为bash命令行参数转义任意字符串如何在bash中转义@符号不同,因为它专门处理已经存在@符号的命令中出现的 '@' 符号,并且该符号用于将给定字符串分隔为特定参数。
附言:虽然使用HTML代码%40代替@可以解决问题,但我更喜欢一种更易读的方法。

2
我会改变我的密码;-) - hgoebl
这不是一种不洁的做法吗? - jobin
为什么你需要以那种方式编写登录密码?是哪个应用程序强制你这样做的?这可能是一个可怕的安全问题。请阅读您正在使用的应用程序的“man”页面,检查是否有以不同方式发送密码的可能性,或者切换到另一个应用程序。 - gniourf_gniourf
是的,我承认这是一个安全问题,但大多数应用程序(包括apt-get)需要在/etc/apt/apt.conf文件中输入用户名和密码。其他应用程序则从/etc/environment/home/$USER/.bashrc指定的环境变量中获取它们。虽然这不是本问题的一部分,但我也很乐意接受其他已知的安全方法来解决这个问题。 - jobin
这不是关于 shell 的问题(在此上下文中不需要转义 @),而是关于使用 http_proxy 变量的任何程序的问题。如果 HTML 编码是唯一的方法来接受字面上的 @,那么你就必须这样做。 - chepner
1个回答

8
你可以使用%40代替@符号。

我错了,我忘记提到我不想使用HTML代码了,有没有一种方法可以避免这个问题? - jobin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接