我有一个我希望在不同的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