Réponses:
De préférence et le plus utilisé n'est pas la même chose. Bien que ce printfsoit mieux pour de nombreuses raisons, la plupart des gens l'utilisent encore echocar la syntaxe est plus simple.
Les principales raisons pour lesquelles vous devriez préférer printfsont:
echo n'est pas normalisé, il se comportera différemment sur différents systèmes.Il est difficile de prédire ce que vous exécutez réellement lorsque vous echo foo. Pour illustrer, sur mon système Debian:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Comme vous pouvez le voir, il existe deux echocommandes différentes , l'une est un shell (bash dans ce cas) intégré et l'autre est un binaire séparé. Notez qu'il a bashégalement une fonction printfintégrée mais son comportement est plus standardisé, donc c'est moins un problème (merci à @ RaduRădeanu pour l'avoir signalé).
Étant donné que certaines (mais pas toutes) les implémentations des echocommutateurs de ligne de commande de support, il est difficile d'imprimer une chaîne qui commence par un -. Bien que de nombreux programmes prennent --en charge la fin des commutateurs et le début des arguments (par exemple, grep -- -a fileils trouveront des lignes filequi contiennent -a), ce echon'est pas le cas. Alors, comment avez-vous l' echoimpression -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 peut le faire facilement:
$ printf -- '-n\n'
-n
$ printf '%s\n' -n
-n
$ printf '\055n\n'
-n
Pour plus d'informations que vous n'auriez jamais voulu savoir pourquoi printfest mieux que echo, consultez cette réponse à une question similaire sur http://unix.stackexchange.com :
printfcomme meilleur interprète.
printf(voir type -a).
printfest défini de manière plus rigide dans POSIX et je pense que le code intégré suit le même standard. Les spécifications POSIX pour echod'autre part sont moins strictes et indiquent même explicitement qu'il y aura des différences entre les implémentations et cela printfdevrait être préféré.
echo. Est-ce exact?
echoplutôt que printfc'est que le forma peut être plus simple. Si vous savez ce que vous imprimez, echo fooc'est plus rapide et plus facile à taper que printf 'foo\n'. En dehors de cela, lors de l'écriture de scripts où une variable doit être imprimée, il n'y a jamais de bonne raison d'utiliser echo.
Demander ce qui est préférable est en soi incomplet.
Si tout ce que l'on souhaite faire est d'émettre une ou plusieurs lignes de texte terminées par des retours à la ligne , alors l'écho suffit. Si quelque chose de plus intelligent est prévu, notamment en incluant une "ligne partielle" qui n'a pas la nouvelle ligne, alors printf est le meilleur à cet effet .
echoimplémentation, "éviter la nouvelle ligne" se fait facilement echo -n. En fait, -nc'est la plus portable des fonctions d'écho. Selon POSIX, il est absent de SystemV mais présent dans la plupart des Unices.
-nBSD et SystemV mais pour tout le reste, je n'en ai aucune idée.