Відповіді:
Переважний і найбільш широко використовується - це не одне і те ж. Хоча printfце краще з багатьох причин, більшість людей все ще використовують, echoоскільки синтаксис простіший.
Основні причини, чому вам слід віддати перевагу printf:
echo не стандартизована, вона поводитиметься по-різному в різних системах.Важко передбачити, що ти насправді працюєш, коли ти echo foo. Для ілюстрації в моїй системі Debian:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Як бачите, є дві різні echoкоманди, одна - вбудована оболонка (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 :
printfкращому перекладачу.
printf(див. type -a).
printfбільш жорстко визначено в POSIX, і я думаю, що вбудований дотримується того ж стандарту. У POSIX специфікація для echoіншої сторони , є менш суворою і навіть явно заявляє , що буде відмінність між реалізаціями і що printfповинно бути кращим.
echo. Це правильно?
echoа не printfте, що форма може бути простішою. Якщо ви знаєте, що ви друкуєте, echo fooце швидше і простіше набрати printf 'foo\n'. Крім того, при написанні сценаріїв, де повинна бути надрукована змінна, ніколи не існує вагомих причин для використання echo.
Запитувати, що є кращим, саме по собі неповно.
Якщо все, що потрібно зробити, - це випустити один або кілька рядків тексту, що закінчуються новими рядками , тоді луна достатньо. Якщо передбачається щось більш розумне, зокрема, включаючи "часткову лінію", у якій немає нового рядка, то printf найкраще для цієї мети .
echoреалізації, "уникнути нового рядка" легко зробити echo -n. Насправді, -nце найпопулярніша з особливостей ехо. Згідно з POSIX, він відсутній у SystemV, але присутній у більшості Unices.
-nBSD і SystemV, але нічого іншого, я поняття не маю.