bash - echo -e 反斜杠转义在 sh 中不被尊重

标签 bash ubuntu centos echo sh

我有一个 shell 脚本,希望在不同的 Linux 服务器上运行。当我在 Ubuntu 12.04 或 Ubuntu 11.04 的 sh shell 上运行带有 -e 选项和转义字符串中的字符的 echo 命令时,它没有按预期执行。我希望脚本在我们使用的两台服务器上运行 CentOS 5.3 和 Ubuntu 12.04。当我在两台服务器上的 bash 中运行以下命令时,会产生预期的输出:

$ echo -e "line1\nline2"
line1
line2

当我在 CentOS 机器上的 sh 中运行相同的命令时,也会产生正确的输出。但是当我在 Ubuntu 12.04 或 11.04 上的 sh 中运行命令时,会产生以下输出:

$ echo -e "line1\nline2"
-e line1
line2

有趣的是,如果我在 Ubuntu 上的 sh 中运行以下命令,它会自动解释转义字符。

$ echo "line1\nline2"
line1
line2

脚本需要在 sh shell 中运行,并且应该可以跨不同的机器移植。任何解决方案。我也非常感谢一些文档的链接,这些文档解释了为什么或如何发生这些事情。

最佳答案

Ubuntu 中的 sh shell 是 dash。它的内置 echo 没有 -e 选项(因此它只是回显它,如您所见),或者更确切地说,它没有关闭转义行为的方法.

改用/bin/echo

要检查您使用的是什么 shell,请尝试 echo $SHELL

$ echo $SHELL
/bin/bash

关于bash - echo -e 反斜杠转义在 sh 中不被尊重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13005474/

相关文章:

php - Centos 6.4安装php54-xml时出错

php - Apache 或 PHP 将 HTTP header 添加到 CSS 和 JS 文件

Ant 的可选任务在 CentOS 上不可用

mysql - 如何最好地在 mysql 命令中使用 bash 中声明的变量?

linux - 如何判断用户是否选择了 "Run In Terminal"

mysql - 如何从 bash 脚本中查找重复的 mysql id 集

ubuntu - dotnet 核心发布问题

apache - 如何为 MediaWiki 设置短 URL?

apache - Ubuntu - 安装 ScyllaDB - 缺少可选包 libsystemd(或 libsystemd-daemon) - GCC 版本错误。 Scylla 需要 GCC >= 7.3 才能编译

bash - 非重复行数 - 唯一计数