我正试图运行这个:
python -c "for i in range(10):\n print i"
但是我收到了错误:
File "<string>", line 1
for i in range(10):\n print i
^
SyntaxError: unexpected character after line continuation character
根据this我假设bash
应该已处理(即换行符号)命令行参数,但返回的错误显示相反的情况。我哪里错了,为什么会这样?
P.S。蟒-2.7
修改
让我解释一下我的动机。
这个代码示例肯定很傻。由于the doc表示“command
可以是由换行符分隔的一个或多个语句,并且在正常模块代码中具有重要的前导空格”,因此我对如何将这些提到的换行符带到{{{ 1}}正确。
这里提出的解决方案是:
使用command
区分循环内的多个命令。是的,虽然有效,但它仍然是单行,我无法使用它如果我想在循环之后运行一些命令。 ;
不能替代换行符。
输入需要换行符的;
。这更准确地击中了目标但不幸的是,在我看来,这基本上破坏了从命令行运行python代码的整个想法,因为它需要交互模式。据我所知,它与输入命令ant命中^M
键相同。因此,键入Enter
并在其shell中工作没有区别。也就是说,我不能用bash脚本写这个。或者我可以吗?
可能这个问题应该分为两个:
用双引号括起来的字符('“')保留引号内所有字符的字面值,除了'$','
python
'在双引号中保留它们的特殊含义(参见Shell Expansions)只有在跟随下列字符之一时,反斜杠才会保留其特殊含义:'$','`',''','\'或换行符。
这与所描述的情况如何对应? bash如何处理换行符?我发现将命令放在一元引号中没有任何改变。
答案 0 :(得分:3)
删除\n
python -c "for i in range(10): print i"
或
您可以使用;
在for循环中使用多行
python -c "for i in range(10): print '1st newline';print '2nd newline';print i"
答案 1 :(得分:3)
您实际上需要将\n
部分转换为实际换行符。这可以使用$''
语法完成:
python -c $'for i in range(10):\n print i'
0
1
2
3
4
5
6
7
8
9
您还可以使用echo -e
或printf
$ python -c "$(echo -e "for i in range(10):\n print i")"
你也可以使用这里的字符串:
$ python <<< $(echo -e "for i in range(10):\n print i")
有关详细信息,请参阅Bash手册页的3.1.2.4 ANSI-C Quoting部分。
答案 2 :(得分:1)
您可以通过在行中添加CR字符来运行多行python -c语句:
python -c "for i in range(10):^M print (i)^M print ('Hello:' + str(i*i))"
其中^ M实际上并非后跟M,它实际上是您键入[CTRL-v] [CTRL-m]时获得的字符。注意这个字符后面的空格,这意味着for循环中有两个print语句,它应该打印:
0
Hello:0
1
Hello:1
....
9
Hello:81
您也可以在bash脚本中执行此操作:
#!/bin/bash
A="python -c \"for i in range(10):^M print (i)^M print ('Hello:' + str(i*i))\""
eval $A