printf 和 echo 哪个更好?

printf 和 echo 哪个更好?

对于显示消息和打印数据,有两个命令可用printfecho
那么它们的用法有何不同?哪一个更可取?

答案1

首选和最广泛使用不是一回事。虽然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打印-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

答案2

询问哪一个更可取本身就是不完整的。

如果一个人只想发出一行或多行文字以换行符结束,那么 echo 就足够了。如果想要更巧妙一点,特别是包含一个没有换行符的“部分行”,那么 printf 是最好的为了这个目的

相关内容