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] \' 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. ---------- _______________________________________ 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