printf 和 echo 哪個比較好?

printf 和 echo 哪個比較好?

對於顯示訊息和列印數據,有兩個命令可用printfecho
那麼他們的使用方式有何不同呢?哪個比較優選?

答案1

優選和最廣泛使用不是同一件事。雖然出於多種原因, Whileprintf更好,但大多數人仍然使用,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 是最好的為了這個目的

相關內容