哪个更好的printf或echo?

为了显示消息和打印数据,有两个命令可用printfecho
然后他们使用了多么不同? 哪个更优选?

优选和最广泛使用的是不一样的。 虽然printf由于许多原因而更好,但大多数人仍然使用echo因为语法更简单。

您更喜欢printf主要原因是:

  1. echo不是标准化的,它在不同的系统上表现不同。
  2. 当你echo foo时,很难预测你实际运行的是什么。 为了说明,在我的Debian系统上:

     $ type -a echo echo is a shell builtin echo is /bin/echo 

    如您所见,有两个不同的echo命令,一个是shell(在本例中为bash)内置,另一个是单独的二进制。 请注意, bash也有一个内置的printf但它的行为更加标准化,所以它不是一个问题(感谢@RaduRădeanu指出它)。

  3. 由于echo某些(但不是全部)实现支持命令行开关,因此很难打印以-开头的字符串。 虽然许多程序支持--表示开关的结束和参数的开始(例如, grep -- -a file将在file中找到包含-a ),但echo不支持。 那么,你怎么有echo print -n

     $ echo -n ## no output $ echo '-n' ## no output $ echo "-n" ## no output $ echo \-n ## no output $ echo -e '\055n' ## using the ASCII code works but only on implementations -n ## that support -e 

    printf可以很容易地做到这一点:

     $ printf -- '-n\n' -n $ printf '%s\n' -n -n $ printf '\055n\n' -n 

有关为什么printf优于echo更多信息,请参阅http://unix.stackexchange.com上类似问题的答案:

https://unix.stackexchange.com/a/65819/22222

要问哪个更好是本身不完整的。

如果所有人都希望发出由换行符终止的一行或多行文本,则回声就足够了。 如果有任何更聪明的意图,特别是包括没有换行符的“部分行”,则printf最适合此目的