Linux下shell編程中echo和printf哪個更強大?
經理認為:
如果shell的環境是bash,那么在一般的使用過程中,echo和printf的功能相差無幾。echo也可以通過-e參數來實現擴展格式的輸出。但是如果一定要分個高下的話,那么printf肯定是要更勝一籌的。從前的bash版本中printf不是內置命令,調用時的開銷要比echo略大,但現在最近的Linux發行版中printf已經是內置的命令了,并且printf與C版本的printf幾乎是完全一樣的,所以printf在功能和效率上都要更加強大。
echo與printf的功能差異一是末尾換行符以及對轉義字符的處理不一樣:echo命令的幫助頁中描述其功能的第一句話就是:將它后面的參數輸出到標準輸出流。
printf命令的幫助頁描述是:在 FORMAT 的控制下格式化并打印 ARGUMENTS 參數。
echo在打印自己的參數的時候,會進行自動的換行,而printf不會:
另外就是對轉義字符的處理也不一樣:
如果printf需要輸出后換行,則必須在末尾加上換行符:
二是打印出來的字符結尾不一樣:echo打印的字符不以EOF結尾,printf打印的字符是以EOF結尾的。這個特性,在向某些端口發送數據的時候需要注意,使用echo發送數據的話,端口因為沒有讀到EOF字符所以會一直處于接收狀態,造成發送超時或者失敗;這個時候就需要使用printf。這一差別到現在不知是否有無改變,如果有知道的大神還請在評論區指點一下。
三是printf支持的格式化功能比echo更多:盡管echo可以通過-e參數實現對一些特殊字符的輸出,并且也可以輸出8\16進制的ASCII字符以及其它控制字符,但printf全部都能夠支持,除此之外還可以實現左對齊右對齊等格式化輸出。這是它比echo強大的主要原因。
echo與printf的性能差異在早現版本的bash里,printf不是內置實現的,所以效率比較低。當前版本的bash已經內置了printf,所以效率有了很大提升。經理我專門做了一下測試,分別調用echo和printf命令一百萬次,看看用時長短:
從測試的結果來看,時間上都差不多,printf還稍微快了一些。
總結echo和printf命令我們都比較常用,printf已經變成了內置實現,效率和功能都更加優秀。使用起來和C語言的版本基本相同,同時支持格式化輸出、控制字符輸出、多進制輸出和字符顏色主題輸出。并且在一些特殊場景下的兼容性更好,所以在輸出語句的角度來講,printf更加強大。
如果我的回答對你有點價值,請莫忘點贊加關注,謝謝!歡迎在評論區發表各種意見。
本文為作者原創,嚴禁轉載,違者必究。