以下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进行构建。任何帮助,将不胜感激。谢谢
答案 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
是新行的转义序列