从bash运行的python multiline命令

Dim*_*imG 6 python bash

我试图运行这个:

python -c "for i in range(10):\n  print i"
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

File "<string>", line 1
for i in range(10):\n  print i
                             ^
SyntaxError: unexpected character after line continuation character
Run Code Online (Sandbox Code Playgroud)

根据这个我假设bash应该已经处理(即换行符号)命令行参数但返回的错误显示相反的情况.我哪里错了,为什么会这样?

PS python-2.7

编辑

让我解释一下我的动机.这个代码示例肯定很傻.由于文档说" command可以是由换行符分隔的一个或多个语句,在正常的模块代码中具有重要的前导空格",我感兴趣的是如何将这些提到的换行符command正确地引入.这里提出的解决方案是:

  1. 使用;区分循环内的命令.是的,这有效,但它仍然是一个单行,我不能使用它如果我想在循环运行一些命令.;不是新行的替代品.

  2. 输入^M需要换行的位置.这更准确地击中了目标但不幸的是,在我看来,这基本上破坏了从命令行运行python代码的整个想法,因为它需要交互模式.据我所知,它与输入命令蚂蚁击中Enter键相同.因此python在shell中键入和工作没有区别.也就是说,我不能用bash脚本写这个.或者我可以吗?

可能这个问题应该分为两个:

  1. Bash逃脱:

    用双引号('"')括起字符可以保留引号内所有字符的字面值,除了'$',' ’, ‘\’, and, when history expansion is enabled, ‘!’. The characters ‘$’ and ‘'在双引号中保留它们的特殊含义(参见Shell Expansions).反斜杠保留其特殊含义只有当后跟下列其中一个字符时:'$','`',''','\'或换行符.

这与描述的情况如何对应?bash如何处理换行符?我发现将命令放在一元引号中没有任何改变.

  1. 如何以非交互方式将换行符传递给python.(你可能会说 - 你为什么不用你想要的所有换行编写一个普通的python文件 - 你是对的但是我对文档中的确切含义感兴趣,因为它引用了换行符)

dam*_*ois 6

您实际上需要将该\n部分转换为实际的换行符。这可以通过语法来完成$''

python -c $'for i in range(10):\n  print i'
0
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

您还可以使用echo -e或达到该结果printf

$ python -c "$(echo -e "for i in range(10):\n  print i")"
Run Code Online (Sandbox Code Playgroud)

您还可以使用此处的字符串:

$ python <<< $(echo -e "for i in range(10):\n  print i")
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅 Bash 联机帮助页的 3.1.2.4 ANSI-C 引用部分。