Risposte:
Preferibile e più usato non è la stessa cosa. Mentre printfè meglio per molte ragioni, la maggior parte delle persone usa ancora echoperché la sintassi è più semplice.
I motivi principali per cui dovresti preferire printfsono:
echo non è standardizzato, si comporterà diversamente su sistemi diversi.È difficile prevedere cosa stai effettivamente eseguendo quando lo fai echo foo. Per illustrare, sul mio sistema Debian:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Come puoi vedere, ci sono due diversi echocomandi, uno è una shell (bash in questo caso) integrata e un altro è un binario separato. Nota che bashha anche un printfbuiltin ma il suo comportamento è più standardizzato, quindi è meno un problema (grazie a @ RaduRădeanu per averlo sottolineato).
Poiché alcune (ma non tutte) implementazioni di echoopzioni della riga di comando supportano, è difficile stampare una stringa che inizia con a -. Mentre molti programmi supportano --per indicare la fine degli switch e l'inizio degli argomenti (ad esempio, grep -- -a filetroveranno le righe fileche contengono -a), echono. Quindi, come si echostampa -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 puoi farlo facilmente:
$ printf -- '-n\n'
-n
$ printf '%s\n' -n
-n
$ printf '\055n\n'
-n
Per ulteriori informazioni di quante tu abbia mai desiderato sapere perché printfè meglio di echo, vedi questa risposta a una domanda simile su http://unix.stackexchange.com :
printfcome interprete migliore.
printf(vedi type -a).
printfè più rigidamente definito in POSIX e penso che il builtin segua lo stesso standard. Le specifiche POSIX per echod'altra parte sono meno rigorose e affermano addirittura esplicitamente che ci saranno differenze tra le implementazioni e che printfdovrebbero essere preferite.
echo. È corretto?
echopiuttosto che printfè che la forma può essere più semplice. Se sai cosa stai stampando, echo fooè più veloce e più facile da scrivere di printf 'foo\n'. A parte questo, quando si scrivono script in cui è necessario stampare una variabile, non c'è mai un buon motivo per usarlo echo.
Chiedere quale sia preferibile è di per sé incompleto.
Se tutto ciò che si desidera fare è emettere una o più righe di testo terminate da una nuova riga , allora l'eco è sufficiente. Se si intende qualcosa di più intelligente, in particolare includendo una "linea parziale" che non ha la nuova riga, allora printf è la cosa migliore a tale scopo .
echodell'implementazione, "evitare la newline" è facilmente eseguibile echo -n. In effetti, -nè la più portatile delle funzionalità dell'eco. Secondo POSIX, è assente da SystemV ma presente nella maggior parte degli Unices.
-nper i BSD e SystemV ma nient'altro, non ne ho idea.