Pour afficher le message et imprimer les données, deux commandes sont disponibles printf
et echo
.
Alors, comment ils ont utilisé différemment? Qu'est-ce qui est préférable?
command-line
Pandya
la source
la source
Réponses:
De préférence et le plus utilisé n'est pas la même chose. Bien que ce
printf
soit mieux pour de nombreuses raisons, la plupart des gens l'utilisent encoreecho
car la syntaxe est plus simple.Les principales raisons pour lesquelles vous devriez préférer
printf
sont: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:Comme vous pouvez le voir, il existe deux
echo
commandes différentes , l'une est un shell (bash dans ce cas) intégré et l'autre est un binaire séparé. Notez qu'il abash
également une fonctionprintf
inté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
echo
commutateurs 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 file
ils trouveront des lignesfile
qui contiennent-a
), ceecho
n'est pas le cas. Alors, comment avez-vous l'echo
impression-n
?printf
peut le faire facilement:Pour plus d'informations que vous n'auriez jamais voulu savoir pourquoi
printf
est mieux queecho
, consultez cette réponse à une question similaire sur http://unix.stackexchange.com :/unix//a/65819/22222
la source
printf
comme meilleur interprète.printf
(voirtype -a
).printf
est 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 pourecho
d'autre part sont moins strictes et indiquent même explicitement qu'il y aura des différences entre les implémentations et celaprintf
devrait être préféré.echo
. Est-ce exact?echo
plutôt queprintf
c'est que le forma peut être plus simple. Si vous savez ce que vous imprimez,echo foo
c'est plus rapide et plus facile à taper queprintf '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'utiliserecho
.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 .
la source
echo
implémentation, "éviter la nouvelle ligne" se fait facilementecho -n
. En fait,-n
c'est la plus portable des fonctions d'écho. Selon POSIX, il est absent de SystemV mais présent dans la plupart des Unices.-n
BSD et SystemV mais pour tout le reste, je n'en ai aucune idée.