`printf >&2` 等同于 `echo >&2` 吗?

`printf >&2` 等同于 `echo >&2` 吗?

这不是一个printfvs的问题echo

我正在尝试编辑我的脚本以供printf专门使用,并且我的代码中有以下内容:

echo >&2 'Failed to initialize REPL repo. Please report this!'

如果我echo用替换printf,是否会产生任何副作用(因为>&2)?

printf >&2 'Failed to initialize REPL repo. Please report this!\n'

我在 askubuntu 中找不到答案。要么没有答案,要么搜索忽略了>&字符。

答案1

重定向>&2是运行脚本的 shell 的一个功能,输出被重定向的程序与它无关。是的,如果你只询问重定向,那就一样了——除非你更改 shell,否则你不必担心它。有关此功能的详细信息,请参阅 shell 手册,例如man bash/重定向为了bash

关于Unix 和 Linux 之间的echo区别,有一个很好的答案:printf为什么 printf 比 echo 更好?

至于为什么您不能在 AU 上搜索符号,请参阅此元问答: 如何在 AU 中搜索包含“$”的字符串?

答案2

如果我用 printf 替换 echo,它会带来任何副作用吗(因为 >&2)?

部分与和 都>&2无关。是 shell 重定向运算符,在这种情况下,它将命令复制到(文件描述符 2) (这是隐含的,但可以用 明确引用) 。它们可以在类似 bourne 的 shell 中以任何顺序出现在命令中。唯一可能发生的问题是shell 及其派生类(请参阅echoprintf>&stdout1>&2stderrcsh相关帖子)。因此,只要您使用类似 Bourne 的 shell(dashbashksh),就应该没问题。

至于printfvsecho通常printf是首选,因为它更易于移植。请参阅为什么 printf 比 echo 更好?

相关内容