【问题标题】:echo program prints newline instead of '\n'echo 程序打印换行符而不是 '\n'
【发布时间】:2020-06-08 23:49:03
【问题描述】:

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

【问题讨论】:

  • 请仔细检查您使用的是 bash 而不是 zsh 或其他一些 shell。
  • echo $SHELL你想不通
  • @GillesQuenot:注意$SHELL 可以包含登录shell,而不是当前运行的shell。
  • '我在我的 macos 上使用 zsh shell'。那么,您不应该在 [linux] 或 [bash] 中标记这个问题。我清理了标签,但以后记得使用合适的标签。

标签: macos shell zsh


【解决方案1】:

根据echo 的 POSIX 规范:

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

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

$ echo "\n"

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

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

$ printf '\\n\n'
\n

【讨论】:

  • 说真的,只要您想可靠地打印任何可能包含反斜杠或以“-”开头的内容,或者想使用echo 的任何选项(即-n-e)。 echo 实现对于任何重要的事情都不一致。
【解决方案2】:

在 macos Catalina 下使用 bash 和 zsh 对此进行了检查。

  • bash: $echo '\n' 产生“\n”
  • zsh: %echo '\n' 产生换行符
  • zsh: %echo '\n' 产生“\n”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 2018-12-19
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多