Câu trả lời:
Tốt hơn và được sử dụng rộng rãi nhất không phải là điều tương tự. Trong khi printftốt hơn vì nhiều lý do, hầu hết mọi người vẫn sử dụng echovì cú pháp đơn giản hơn.
Những lý do chính tại sao bạn nên thích printflà:
echo không được chuẩn hóa, nó sẽ hoạt động khác nhau trên các hệ thống khác nhau.Thật khó để dự đoán những gì bạn thực sự chạy khi bạn echo foo. Để minh họa, trên hệ thống Debian của tôi:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Như bạn có thể thấy, có hai echolệnh khác nhau , một lệnh là shell (bash trong trường hợp này) được xây dựng và một lệnh khác là nhị phân riêng. Lưu ý rằng bashcũng có printfnội dung dựng sẵn nhưng hành vi của nó được chuẩn hóa hơn nên ít gặp sự cố hơn (cảm ơn @ RaduRădeanu vì đã chỉ ra).
Do một số (nhưng không phải tất cả) các cài đặt echochuyển đổi dòng lệnh hỗ trợ, thật khó để in một chuỗi bắt đầu bằng a -. Mặc dù nhiều chương trình hỗ trợ --để biểu thị sự kết thúc của các công tắc và bắt đầu của các đối số (ví dụ: grep -- -a filesẽ tìm thấy các dòng trong fileđó có chứa -a), echonhưng không. Vì vậy, làm thế nào để bạn có echoin -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 có thể làm điều này một cách dễ dàng:
$ printf -- '-n\n'
-n
$ printf '%s\n' -n
-n
$ printf '\055n\n'
-n
Để biết thêm thông tin mà bạn muốn biết về lý do tại sao printftốt hơn echo, hãy xem câu trả lời này cho một câu hỏi tương tự trên http://unix.stackexchange.com :
printflàm thông dịch viên tốt hơn.
printf(xem type -a).
printfđược định nghĩa chặt chẽ hơn trong POSIX và tôi nghĩ rằng nội dung theo tiêu chuẩn tương tự. Các POSIX thông số kỹ thuật cho echomặt khác ít nghiêm ngặt và thậm chí nhà nước một cách rõ ràng rằng sẽ có sự khác biệt giữa hiện thực và đó printfnên được ưa thích.
echo. Đúng không?
echochứ không phải printflà forma có thể đơn giản hơn. Nếu bạn biết những gì bạn đang in, echo foosẽ nhanh hơn và dễ nhập hơn printf 'foo\n'. Ngoài ra, khi viết các tập lệnh cần in một biến, không bao giờ có lý do chính đáng để sử dụng echo.
Để hỏi cái nào thích hợp hơn là bản thân nó không đầy đủ.
Nếu tất cả một điều muốn làm là phát ra một hoặc nhiều dòng văn bản bị chấm dứt bởi dòng mới , thì tiếng vang đủ. Nếu có bất cứ điều gì thông minh hơn được dự định, cụ thể bao gồm "một phần dòng" không có dòng mới, thì printf là tốt nhất cho mục đích đó .
echothực hiện, "tránh dòng mới" có thể dễ dàng thực hiện với echo -n. Trong thực tế, -nlà tính năng di động nhất của echo. Theo POSIX, nó không có trong SystemV nhưng có mặt trong hầu hết các Unices.
-nBSD và SystemV nhưng bất cứ điều gì khác, tôi không biết.