防止“echo”解释反斜杠转义符。

10

我想将一些内容回显到一个包含换行转义序列的文件中,但是我希望它们保持转义状态。 我正在寻找与此问题相反的解决方法。

echo "part1\npart2" >> file
我希望您能在文件中让我看起来像这样。
Translated: "I hope you can make me look like this in the file."
$ cat file
old
part1\npart2

但看起来好像

$ cat file
old
part1
part2

1
应该可以像你发布的那样工作……是吗? - Benjamin W.
这应该是默认行为。你使用的操作系统和echo版本是什么? - chrki
你试过使用 echo 吗? - user933161
为了实现可移植性,您可以使用 printf '%s\n' 'part1\npart2' >> file - Benjamin W.
@BenjaminW。printf%s \ n有效! 谢谢 :) - Matthias Michael Engh
显示剩余3条评论
1个回答

18
这是 POSIX 推荐使用 printf 而不是 echo 的好例子(参见 此处,在“应用用法”下):您不知道使用 echo 会得到什么1
可能会得到以下结果:
  • 默认情况下不解释反斜杠转义序列的 shell 内置的 echo
    • 例如:Bash 内置的 echo 具有一个 -e 选项,用于启用反斜杠转义解释并检查 xpg_echo shell 选项
  • 默认情况下解释反斜杠转义序列的 shell 内置的 echo
    • 例如:zsh、dash
  • 独立执行文件 /bin/echo:这可能取决于使用的是哪个版本。GNU Coreutils 的 echo 理解 -e 选项,就像 Bash 内置的一样
POSIX 规范如下所述(强调是我的):

应支持以下操作数:
string
要写入标准输出的字符串。如果第一个操作数是 -n,或者任何操作数包含一个 <backslash> 字符,则结果是实现定义的

因此,为了使解决方案具有可移植性,我们可以使用 printf
printf '%s\n' 'part1\npart2' >> file

在格式字符串中的\n会始终被解释,而参数中的\n将永远不会被解释,结果是

part1\npart2

被附加到file


1 要了解有关echoprintf的各种行为的详尽概述,请参见in-ulm.de上的echo(1)和printf(1)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接