我尝试使用“ c”参数运行python代码:
python3 -c $'import sys\nfor r in range(1): print(\'rob\')'
成功,打印
rob
但是我想打印报价:
I'm a rob
这当然不起作用:
python3 -c $'import sys\nfor r in range(10): print(\'I'm rob\')'
如何实现?
答案 0 :(得分:2)
您将如何用Python编写该字符串?如果您想将其用单引号引起来,那将是这样的:
print('I\'m rob')
...因此在$''
引号内的字符串中将变成类似以下内容:
print(\'I\\\'m rob\')
...一旦您将引号和文字反斜杠都转义了,Python解释程序将其解析为内部引号的保护。因此:
python3 -c $'import sys\nfor r in range(10): print(\'I\\\'m rob\')'
顺便说一句-当您可以要求shell为您完成操作时,没有充分的理由手动进行此操作:
script=$(cat <<'EOF'
import sys
for r in range(10):
print('I\'m rob')
EOF
)
printf '%q ' python3 -c "$script"; printf '\n'
...发出:
python3 -c $'import sys\nfor r in range(10):\n print(\'I\\\'m rob\')'
...您实际上可以将其作为代码运行。 (或者您也可以在上述基于Heredoc的定义之后运行python3 -c "$script"
,该定义将调用您的脚本,而无需在任何地方涉及代码的手动转义副本)。
答案 1 :(得分:0)
在print
中使用转义的双引号应该可以:
python3 -c $'import sys\nfor r in range(10): print(\"I\'m rob\")'
答案 2 :(得分:0)
按照@pault的说法,但有进一步的解释。
这是行不通的,因为您要结束字符串并以引号开头,这是因为您使用了单引号来声明字符串。可以通过使用双引号来声明字符串来轻松解决此问题。
python3 -c $'import sys\nfor r in range(10): print("I\'m rob")'
答案 3 :(得分:0)
如果您没有在Python脚本中使用其他任何参数,请将字符串作为参数传递,以减少所需的嵌套引用量。
python3 -c $'import sys\nfor r in range(1): print(sys.argv[1])' "I'm a rob"