R. David Murray added the comment:

Indeed, you can see in the original posting that the \ is already gone from the 
dollar in sys.argv, so argparse has nothing to do with it.

And it is indeed the shell doing the unescaping:

rdmurray@session:~>cat test.sh
#!/bin/bash
echo "$@"
rdmurray@session:~>bash test.sh "abc [\t] \$"
abc [\t] $
rdmurray@session:~>bash test.sh 'abc [\t] \$'
abc [\t] \$
rdmurray@session:~>bash test.sh 'abc [\t] \$'
abc [\t] \$
rdmurray@session:~>bash test.sh "'abc [\t] \$'"
'abc [\t] $'
rdmurray@session:~>bash test.sh "'abc [\t] \\$'"
'abc [\t] \$'
rdmurray@session:~>bash test.sh '"abc [\t] \\\$foo"'
"abc [\t] \\\$foo"
rdmurray@session:~>bash test.sh '"abc [\t] \$foo"'  
"abc [\t] \$foo"

The shell treats $ specially because $ has a special meaning inside double 
quotes (variable substitution), so it presumably unescapes it as part of the 
double quote string processing.  You have to escape both the backslash and the 
$ if you want a literal '\$' to wind up in argv, when the outer level of 
quoting is double quotes.

----------
nosy: +r.david.murray
resolution:  -> invalid
stage:  -> committed/rejected
status: open -> closed

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue19430>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to