如何在bash中转义转义的报价

时间:2019-01-09 22:52:22

标签: python bash sh

我尝试使用“ 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\')'

如何实现?

4 个答案:

答案 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"