如何在 Linux 上传递带有感叹号的参数?
Posted
技术标签:
【中文标题】如何在 Linux 上传递带有感叹号的参数?【英文标题】:How to pass argument with exclamation mark on Linux? 【发布时间】:2011-03-21 18:19:28 【问题描述】:我有一个简单的 Python 脚本,它接收用户名和密码作为参数,但我的密码包含两个感叹号。当我调用我的脚本时
salafek@dellboy:~/Desktop/$ emailsender.py -u username -p pass!!
我之前输入的命令替换了感叹号:
salafek@dellboy:~/Desktop/$emailsender.py -u username -p "passemailsender.py -u username -p passwget wget http://www.crobot.com.hr/templog"
我可以使用反斜杠 (\
) 转义感叹号,但我的密码会更改。
有没有解决办法,如何在不更改密码的情况下转义感叹号?
【问题讨论】:
第二个命令没有多大意义,你想在那里做什么?特别是passemailsender.py -u username -p passwget wget ...
部分
!!被shell替换,它被最后执行的命令替换。这不是特定于 python 的。
@Infinity - Bash 解释“!!”作为您输入的最后一个命令。因此,当他在没有使用单引号或反斜杠转义密码的情况下输入命令时,bash 会在“!!”的位置插入他的最后一个命令。是。
【参考方案1】:
正如其他人所提到的,此问题并非特定于 Python,而是由您将密码参数传递给脚本的方式引起的。
您需要将密码字符串用单引号括起来,以确保它完全按照您键入的方式传递给脚本,并且不会被 shell 解释。
如果用户名可能包含感叹号或其他特殊字符,您也可以这样做。
例如:
emailsender.py -u 'username' -p 'pass!!'
【讨论】:
【参考方案2】:您需要使用\
对其进行转义或使用单引号将其引用,否则您的shell 会解释它。
emailsender.py -u username -p pass\!\!
或
emailsender.py -u username -p 'pass!!'
【讨论】:
仅作记录,如果您没有双引号引用参数,则转义可以正常工作。否则,“\”将按字面意思写入文件。【参考方案3】:您应该能够在 shell 中简单地将内容用单引号括起来。
$ emailsender.py -u username -p 'pass!!'
【讨论】:
以上是关于如何在 Linux 上传递带有感叹号的参数?的主要内容,如果未能解决你的问题,请参考以下文章
[Catel]如何将带有构造函数参数的 ViewModel 传递给 TabService 扩展方法?
如何在android中传递一个带有嵌套参数的RPC Json
从带有命令行参数的批处理文件运行控制台应用程序,如何在运行时传递参数值? [复制]