echo -e反斜杠转义在sh中没有得到尊重

Mar*_*agh 5 bash ubuntu centos sh echo

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

$ echo -e "line1\nline2"
line1
line2
Run Code Online (Sandbox Code Playgroud)

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

$ echo -e "line1\nline2"
-e line1
line2
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我在Ubuntu上运行以下内容,它会自动解释转义字符.

$ echo "line1\nline2"
line1
line2
Run Code Online (Sandbox Code Playgroud)

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

ric*_*ici 5

shUbuntu中的shell是dash.它的内置回声没有一个-e选项(因此它只是回声,如你所见),或者说,它没有办法关闭逃避行为.

/bin/echo改用.

要检查您正在使用的shell,请尝试 echo $SHELL

$ echo $SHELL
/bin/bash
Run Code Online (Sandbox Code Playgroud)

  • @MarwanAlsabbagh`/bin/echo`不是一个好的选择.如果你真的想使用`/ bin/sh`,请使用`printf`,否则使用不同的shell. (2认同)