Do wyświetlania wiadomości i danych drukowania dostępne są dwa polecenia printf
i echo
.
Więc jak inaczej wykorzystali? Który jest bardziej preferowany?
command-line
Pandya
źródło
źródło
Odpowiedzi:
Preferowane i najczęściej stosowane to nie to samo. Chociaż
printf
jest lepszy z wielu powodów, większość ludzi nadal korzysta z niego,echo
ponieważ składnia jest prostsza.Główne powody, dla których powinieneś preferować
printf
to:echo
nie jest znormalizowany, będzie zachowywać się inaczej w różnych systemach.Trudno jest przewidzieć, co tak naprawdę biegasz
echo foo
. Aby to zilustrować, w moim systemie Debian:Jak widać, istnieją dwie różne
echo
komendy, jedna to wbudowana powłoka (w tym przypadku bash), a druga to osobny plik binarny. Zauważ, żebash
ma równieżprintf
wbudowane, ale jego zachowanie jest bardziej znormalizowane, więc nie stanowi większego problemu (dzięki @ RaduRădeanu za wskazanie go).Ponieważ niektóre (ale nie wszystkie) implementacje
echo
przełączników linii poleceń obsługujących, trudno jest wydrukować ciąg rozpoczynający się od-
. Podczas gdy wiele programów obsługuje--
koniec przełączników i początek argumentów (na przykładgrep -- -a file
znajdzie wiersze w nimfile
zawarte-a
),echo
nie ma. Jak maszecho
wydruk-n
?printf
łatwo to zrobić:Aby uzyskać więcej informacji, niż kiedykolwiek chciałeś wiedzieć, dlaczego
printf
jest lepszy niżecho
, zapoznaj się z odpowiedzią na podobne pytanie na stronie http://unix.stackexchange.com :/unix//a/65819/22222
źródło
printf
lepszego tłumacza.printf
(patrztype -a
).printf
jest bardziej rygorystycznie zdefiniowane i myślę, że wbudowany jest zgodny z tym samym standardem. POSIX specyfikacje dlaecho
drugiej strony są mniej rygorystyczne, a nawet wyraźnie stwierdzają, że będą różnice pomiędzy implementacjami i któreprintf
powinny być preferowane.echo
. Czy to jest poprawne?echo
raczej niżprintf
jest to, że forma może być prostsze. Jeśli wiesz, co drukujesz,echo foo
jest szybsze i łatwiejsze do pisania niżprintf 'foo\n'
. Poza tym podczas pisania skryptów, w których należy wydrukować zmienną, nigdy nie ma dobrego powodu, aby z niej korzystaćecho
.Pytanie o to, co jest lepsze, samo w sobie jest niepełne.
Jeśli wszystko, co chcesz zrobić, to wyemitować jeden lub więcej wierszy tekstu zakończonych znakami nowej linii , wystarczy echo. Jeśli zamierzone jest coś bardziej sprytnego, w szczególności „linia częściowa”, która nie ma nowej linii, to do tego celu najlepiej nadaje się printf .
źródło
echo
implementacji można łatwo „uniknąć nowej linii”echo -n
. W rzeczywistości-n
jest najbardziej przenośną z funkcji echa. Według POSIX nie ma go w SystemV, ale występuje w większości Unices.-n
BSD i SystemV, ale cokolwiek innego, nie mam pojęcia.