这不是一个printf
vs的问题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 及其派生类(请参阅echo
printf
>&
stdout
1>&2
stderr
csh
相关帖子)。因此,只要您使用类似 Bourne 的 shell(dash
、bash
、ksh
),就应该没问题。
至于printf
vsecho
通常printf
是首选,因为它更易于移植。请参阅为什么 printf 比 echo 更好?