
對於顯示訊息和列印數據,有兩個命令可用printf
和echo
。
那麼他們的使用方式有何不同呢?哪個比較優選?
答案1
優選和最廣泛使用不是同一件事。雖然出於多種原因, Whileprintf
更好,但大多數人仍然使用,echo
因為語法更簡單。
您應該選擇的主要原因printf
是:
echo
沒有標準化,它在不同的系統上會有不同的表現。當您運行時,很難預測您實際運行的是什麼
echo foo
。為了說明這一點,在我的 Debian 系統上:$ type -a echo echo is a shell builtin echo is /bin/echo
正如您所看到的,有兩個不同的
echo
命令,一個是內建的 shell(在本例中為 bash),另一個是單獨的二進位檔案。請注意,它bash
也有一個printf
內建函數,但其行為更加標準化,因此問題較少(感謝@RaduRădeanu 指出這一點)。由於某些(但不是全部)實現
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:
答案2
要問哪個比較可取本身就是不完整的。
如果一個人只想發出一行或多行文本由換行符號終止,那麼 echo 就足夠了。如果想要更聰明的東西,特別是包含沒有換行符的“部分行”,那麼 printf 是最好的為了這個目的。