【问题标题】:'\n' is treated as '\' and 'n' [duplicate]'\n' 被视为 '\' 和 'n' [重复]
【发布时间】:2014-06-03 18:54:06
【问题描述】:

以下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 进行构建。任何帮助,将不胜感激。谢谢

【问题讨论】:

  • 应该是什么结果......只是为了确保我们理解您的 \\"" 和 \\\\n 正确。
  • 看起来前面的 \ 是 \\ 在你的情况下!
  • 您的意思是将\\\\n 减少为\\n?
  • 你不是刚刚ask about this吗?问题仍然是相同的 - 额外的转义级别。按照那里的说明将\\\\n 更改为\\n。
  • @mahmood 是的,如果我在你的样本中计算它们,你有 2 \\(转义的反斜杠)和 1 n

标签: python shell


【解决方案1】:

这实际上不是 python 或 C++ 问题,因为您在抱怨 shell 引用的行为(尽管当您使用 echo -e 之类的东西时,某些 shell 允许在参数中使用类似 \n 的转义码)。

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

【讨论】:

  • 是的,诀窍是使用\\n 和echo -e。谢谢
  • 实际上,我不会在此处使用echo -e,因为您在该命令行中粘贴了各种其他变量,并且您很可能不希望将其中可能包含的任何`\`解释为一个转义序列。我再说一遍:尝试在 Python 中生成换行符。
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    '\\\\n' == '\\' + '\\' + 'n'
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 2019-02-27
      • 2022-11-14
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多