我试图运行这个:
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
正确地引入.这里提出的解决方案是:
使用;
区分循环内的命令.是的,这有效,但它仍然是一个单行,我不能使用它如果我想在循环后运行一些命令.;
不是新行的替代品.
输入^M
需要换行的位置.这更准确地击中了目标但不幸的是,在我看来,这基本上破坏了从命令行运行python代码的整个想法,因为它需要交互模式.据我所知,它与输入命令蚂蚁击中Enter
键相同.因此python
在shell中键入和工作没有区别.也就是说,我不能用bash脚本写这个.或者我可以吗?
可能这个问题应该分为两个:
用双引号('"')括起字符可以保留引号内所有字符的字面值,除了'$','
’, ‘\’, and, when history expansion is enabled, ‘!’. The characters ‘$’ and ‘
'在双引号中保留它们的特殊含义(参见Shell Expansions).反斜杠保留其特殊含义只有当后跟下列其中一个字符时:'$','`',''','\'或换行符.
这与描述的情况如何对应?bash如何处理换行符?我发现将命令放在一元引号中没有任何改变.
您实际上需要将该\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 引用部分。
归档时间: |
|
查看次数: |
1418 次 |
最近记录: |