Echo -e后斜线逃脱了SH



我有一个我希望在不同的Linux服务器上运行的Shell脚本。当我使用-e选项运行Echo命令并在字符串中逃脱字符时,它不会在Ubuntu 12.04或Ubuntu 11.04上的SH Shell上执行。我希望脚本使用的两个服务器正在运行CentOS 5.3和Ubuntu 12.04。当我在两个服务器上的bash中运行以下命令时,会产生预期的输出:

$ echo -e "line1nline2"
line1
line2

当我在CentOS机器上运行相同的命令时,还会产生正确的输出。但是,当我在ubuntu上运行命令时,产生以下输出:

$ echo -e "line1nline2"
-e line1
line2

有趣的是,如果我在ubuntu上的sh中运行下面,它会自动解释逃生字符。

$ echo "line1nline2"
line1
line2

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

ubuntu中的 sh shell是 dash。它的内置回声没有-e选项(因此,如您所见,它简单地回荡它),或者,它没有一种关闭逃生行为的方法。

而是使用/bin/echo

检查您使用的外壳尝试echo $SHELL

$ echo $SHELL
/bin/bash

echo在实现之间无望不一致;如果您需要对非平凡应用程序(例如逃生序列)的一致行为,请改用printf(并记住明确添加最终 n):

$ printf "line1nline2n"
line1
line2

相关内容

  • 没有找到相关文章

最新更新