我有一个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
当我在CentOS机器上运行相同的命令时,也会产生正确的输出。但是当我在Ubuntu 12.04或11.04上运行命令时,会产生以下输出:
$ echo -e "line1\nline2"
-e line1
line2
有趣的是,如果我在Ubuntu上运行以下内容,它会自动解释转义字符。
$ echo "line1\nline2"
line1
line2
脚本需要在sh shell中运行,并且应该可以在不同的机器上移植。任何解决方案我也非常感谢某些文档的链接,解释了为什么或如何发生这种情况。
答案 0 :(得分:5)
Ubuntu中的sh
shell为dash
。它的内置回声没有-e
选项(因此它只是回声,如你所见),或者说,它没有办法关闭转义行为。
改为使用/bin/echo
。
要查看您正在使用的shell,请尝试echo $SHELL
$ echo $SHELL
/bin/bash
答案 1 :(得分:0)
echo
在实现之间无可救药地不一致;如果您需要一致的行为来处理非平凡的应用程序(例如转义序列),请改用printf
(并记住明确添加最终的\ n):
$ printf "line1\nline2\n"
line1
line2