回显在脚本中打印出-e

4
当我在终端(bash)中运行它时。
echo -e ."\c"

打印出 . 并抑制换行符。

当我运行以下脚本(所有代码)

echo -e ."\c"
echo -e ."\c"

它会打印出..并抑制换行符。

当我在带有shebang(!#/bin/sh)的脚本中运行它时,它会打印出-e . -e .并抑制换行符。

为什么?如何防止这种情况发生?

编辑: 我想要防止-e被打印出来,因此我的输出应该是. .


你的shebang行实际上是#!/bin/echo吗?如果是这样,那么很可能是因为echo是一个内置命令,而shebang文件实际上执行的是一个二进制文件,它不解释-e选项。 - falstro
不,它是#!/bin/sh。而且,-e标签实际上是起作用的,但它仍然会将其打印出来。 - Ritwik Bose
在这里澄清一下:你期望看到什么结果,以及你试图防止哪个部分? - John Feminella
1
你的shebang行是什么?运行shebang的shell可能不是BASH吗? - PP.
我建议你展示一下你的脚本,这样更容易发现问题。 - falstro
显示剩余3条评论
2个回答

3

将你的脚本shebang更改为#!/bin/bash而不是#!/bin/sh,看看是否有效。


3
如果您想保留shebang,请使用/bin/echo,否则您可以忽略它。 - shuvalov
更改/bin/sh是更安全的,因为如果在bash中使用,有些东西在sh中无法正常工作。 - ghostdog74
考虑到我使用 sh 编写和测试了脚本,那么在使用 bash 时是否可能会出现问题呢?(现在这个问题已经无关紧要了,因为切换到 bash 后一切都正常运行) - Ritwik Bose
根据你的发行版,/bin/sh 可能会被“别名”为旧的 Bourne shell,有时是 dash,有时是 bash 等等。Bash 是 Bourne 的超集,因此如果你用 Bash 编写并将脚本带到 Bourne 上运行,可能会遇到问题。参见 http://en.wikipedia.org/wiki/Shebang_%28Unix%29 获取更多信息。最好还是明确指定使用哪个 shell。 - ghostdog74
@ghostdog74 POSIX sh的超集--不是Bourne的超集;在Bourne中,您可以运行echo foo ^ cat,而^将像管道一样起作用,而在POSIX中,^echo的参数。(这个具体的差异是GNU autoconf测试pre-POSIX Bourne shells的方式)。 - Charles Duffy

2

如果你的 shebang 行调用 sh,那么你需要给 echo 提供绝对路径。或者,只需更改 shebang 以使用 bash。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接