我正在尝试以下示例:
python -c "import sys; print sys.argv[1]" "test\ntest"
输出:
test\ntest
但我想要关注
test
test
更新1#
正如@devnull建议的那样,如果用户自己通过了$
,那么可以解决问题,但是python应该如何解决这个问题?
我试过了:
python -c "import sys; print '$' + sys.argv[1]" 'test\ntest'
但输出:
$test\ntest
答案 0 :(得分:4)
告诉shell传递你想看的内容:
python -c "import sys; print sys.argv[1]" $'test\ntest'
这会产生:
test
test
$'string'
语法称为ANSI-C Quoting。
另一种方法是告诉shell解释你的原始输出:
python -c "import sys; print sys.argv[1]" 'test\ntest' | xargs -0 echo -en
这也会产生:
test
test
答案 1 :(得分:4)
正如deed02392所提到的,shell从字面上发送字符,因此python在内部“转义”反斜杠。要了解我的意思,请尝试
python -c "import sys; print repr(sys.argv[1])" "test\ntest"
'test\\ntest'
要解决此问题,请执行以下操作:
python -c "import sys; print sys.argv[1].decode('string_escape')" "test\ntest"
test
test
答案 2 :(得分:0)
你的shell正在向python脚本发送两个文字字符\
和n
。
由于您正在使用bash,我相信如果您只是在"test
之后按实际返回键,它会检测到您仍在输入参数并让您继续使用另一个test"
然后通过这到python。