我有一个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机器上使用sh运行相同的命令也会产生正确的输出。但是在Ubuntu 12.04或11.04上使用sh运行该命令会产生以下输出:
$ echo -e "line1\nline2"
-e line1
line2
如果我在Ubuntu上使用sh运行以下命令,它会自动解释转义字符。
$ echo "line1\nline2"
line1
line2
脚本需要在sh shell中运行,并应该能够在不同的机器上移植。有什么解决方案吗?我也非常感谢提供一些解释为什么或如何发生这种情况的文档链接。
/bin/echo
不是一个好的替代品。如果你真的想使用/bin/sh
,请使用printf
,否则请使用其他 shell。 - ormaaj