如何在Linux上传递带有感叹号的参数?

时间:2010-07-27 18:07:59

标签: linux shell arguments

我有一个简单的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"

我可以使用反斜杠(\)来转义感叹号,但我的密码会更改。

是否有解决方案,如何在不更改密码的情况下转义惊叹号?

4 个答案:

答案 0 :(得分:56)

你应该能够简单地用shell中的单引号括起来。

$ emailsender.py -u username -p 'pass!!'

答案 1 :(得分:17)

你需要用\来转义它,或用单引号引用它,否则你的shell会解释它。

emailsender.py -u username -p pass\!\!

emailsender.py -u username -p 'pass!!'

答案 2 :(得分:2)

正如其他人所提到的,这个问题不是特定于Python的,而是由您将密码参数传递给脚本的方式引起的。

您需要将密码字符串包装在单引号中,以确保它与您键入的内容完全一致,并且不会被shell解释。

您也可以为用户名执行此操作,如果它可能包含感叹号或其他特殊字符。

例如:

emailsender.py -u 'username' -p 'pass!!'

答案 3 :(得分:-3)

你试过吗

$ emailsender.py -u username -p "pass!!"

编辑 - 这不起作用。阅读以下评论