由 `echo` 产生的换行符,在不使用任何选项时是否总是存在,无论 shell 是什么?

由 `echo` 产生的换行符,在不使用任何选项时是否总是存在,无论 shell 是什么?

虽然我读过史蒂芬回答基本上集中于echovs的所有方面printf,我不确定它是否也回答了我的问题,即:

由 生成的换行符echo,在几乎所有系统上是否始终存在而不使用任何选项?:

我有一个 POSIX 脚本,其中相关部​​分是:

printf '\n'; printf '\n' >&2

printf我问自己,在这种情况下我还需要坚持吗?

它可能看起来更好:

echo; echo >&2

但我不是专家,所以我不确定。

答案1

由 生成的换行符echo,是否在几乎所有系统上都始终存在而不使用任何选项?

我不知道它是否真的一直存在全部系统,但它应该存在于所有 POSIX 派生系统上。根据规格

描述
echo实用程序将其参数写入标准输出,后跟 <newline>。如果没有参数,则仅写入 <newline>。

然后

实现不应支持任何选项。

虽然某些实现确实支持很少的选项,但在没有给定选项的情况下,它们应该回退到 POSIX。所以是的,他们应该产生一个换行符。

从理论上讲,如果你害怕echo不遵守,你也可能害怕printf不遵守。在实践中,我宁愿printf在尝试编写健壮的代码时相信无论如何,因为它通常是正确的工具,并且在某些边缘情况下没有必要放弃它(请参阅“超越简单情况”这个答案明白我的意思)。

相关内容