首页 > 解决方案 > echo 程序打印换行符而不是 '\n'

问题描述

在 bash 中,单引号之间的任何内容都将保持其字面意义,但是当我在终端中键入 "echo '\n'" 时。我得到的输出是换行符,而不是预期的 '\n' 字符。

标签: macosshellzsh

解决方案


根据 POSIX 规范echo

如果第一个操作数是 -n,或者任何操作数包含<backslash>字符,则结果是实现定义的。

echo通常是内置的 shell,zsh默认情况下会解释反冲转义。您可以使用echo -E,它告诉zshbash版本echo禁用特殊处理。zsh还使用BSD_ECHOshell 选项来控制这种行为:

$ echo "\n"

$ echo -E "\n"
\n
$ setopt BSD_ECHO
$ echo "\n"
\n

不过,最便携的替代方法是使用printfinstead of echo,因为它不依赖于任何特定于 shell 的行为:

$ printf '\\n\n'
\n

推荐阅读