'\ n'被视为'\'和'n'

时间:2014-04-19 09:07:31

标签: python shell

以下python代码

env.Command(versionFile, allSrcs + [".git/index", "SConstruct"],
        'echo "#define ZSIM_BUILDDATE \\""`date`\\""\\\\n#define ZSIM_BUILDVERSION \\""`python misc/gitver.py`\\""" >>' + versionFile)

产生这样的输出

$ cat build/opt/version.h
#define ZSIM_BUILDDATE "Sat Apr 19 13:31:41 CET 2014"\n#define ZSIM_BUILDVERSION "master:10:a8c417b:2fc 3+ 2- d5cec7e7"

正如您所看到的,它并不了解'\n'表示new line+carriage return。相反,它只需打印'\''n'

我该如何解决?

P.S:这个问题是对此one的后续跟进。上一篇文章是一般的,并没有找到问题所在。我还使用scons进行构建。任何帮助,将不胜感激。谢谢

3 个答案:

答案 0 :(得分:5)

这实际上不是python或C ++问题,因为你在抱怨shell引用的行为(当你使用类似echo -e之类的东西时,一些shell允许转义代码如\ n中的\ n}。

因此,如果你想获得一个换行符,请尝试在Python中生成它(引用字符串中的换行符将使其成为echo的参数),而不是生成一些shell不会进一步处理的转义序列。

答案 1 :(得分:1)

'\\\\n' == '\\' + '\\' + 'n'

你正在逃避2个反斜杠,所以在下一个解释中它归结为\\n。 因此,只需将\\\\n替换为\\n

即可

答案 2 :(得分:1)

您需要echo -e ...,以便echo了解\n是新行的转义序列