直接调用时和通过shell脚本调用时的“echo -e”

时间:2012-05-14 21:38:43

标签: shell echo

我注意到echo直接调用时的行为略有不同

root$echo "line1\nline2"

当通过脚本调用时:

#! /bin/sh

echo "line1\nline2"

[...]

第一个案例将打印出来:

line1\nline2

,而后者会打印

line1
line2

因此,在脚本中使用时,echo总是被假定为标记-e

1 个答案:

答案 0 :(得分:5)

您的脚本有#! /bin/sh的shebang行,而您的交互式shell可能是Bash。如果您需要Bash行为,请将脚本更改为#! /bin/bash

两个程序shbash不同的 shell。即使在/bin/sh/bin/bash是同一程序的系统上,它的行为也会有所不同,具体取决于您用来调用它的命令。 (虽然echo的行为与Bash的-e模式默认启用sh的行为不同,所以您可能正在sh真正dash sh的系统上1}}。)

如果您在提示符下键入echo,则会发现sh的行为方式与脚本相同。但是sh对于交互式使用来说并不是一个非常友好的shell。

如果您正在尝试编写最大程度的可移植shell脚本,那么您应该坚持使用vanilla bash语法,但如果您不是为了远程编写分发,可以使用Bash脚本 - 只需确保通过将echo放在shebang行中,告诉系统它们实际上是Bash脚本。

顺便说一下,{{1}}命令可能是跨shell最臭名昭着的命令。因此,如果你想要便携性,那么你最好完全避免它,除了直接,无选项,无逃避,总是换行输出。一个非常便携的选项是printf