Pourquoi printf est supérieur à echo dans les scripts Linux
L'une des premières commandes apprises par les nouveaux utilisateurs de Linux est echo. Besoin d'imprimer du texte ou de déboguer un script ? Ajoutez une instruction echo. Cependant, d'après mon utilisation, j'ai trouvé printf beaucoup plus puissant. Une fois que vous avez compris ses bases, cela devient une valeur par défaut plus sûre pour imprimer des sorties dans des scripts.
Sommaire
Pourquoi l'écho n'est pas aussi simple qu'il y paraît
L’un des plus gros problèmes de l’écho est que son comportement n’est pas entièrement standardisé. Différents shells le gèrent différemment, notamment en ce qui concerne les options et les séquences d'échappement. Par exemple, si echo -n supprime en fait la nouvelle ligne de fin ou l'imprime simplement textuellement en fonction du shell. Il en va de même pour les caractères d'échappement comme n ou t. Ils peuvent fonctionner dans un environnement et être imprimés littéralement dans un autre.
Cela peut provoquer des bugs subtils dans les scripts. Un script qui fonctionne parfaitement sur votre système peut se comporter différemment sur une autre machine ou lorsqu'il est exécuté sous un autre shell. Par exemple, l'outil zipgrep utilise echo sous le capot et, en raison du comportement imprévisible de echo, cela entraîne des problèmes d'utilisation de zipgrep.
Pourquoi printf est plus fiable
La commande printf offre un comportement bien défini suivant la norme POSIX, ce qui signifie qu'elle fonctionne de la même manière sur tous les shells et systèmes. Là où echo échoue souvent avec les séquences d'échappement, printf les gère avec élégance, ce qui en fait une alternative plus sûre pour les scripts bash.
Au-delà de la fiabilité, printf offre des fonctionnalités que echo n'a tout simplement pas. Il prend en charge la sortie formatée, vous permettant de contrôler la manière dont les chaînes, les nombres et les variables sont affichés. Vous pouvez aligner le texte, contrôler les décimales et combiner plusieurs valeurs en une seule sortie prévisible. Le tout en utilisant une seule commande.
# Alignment
printf "%-10s %sn" "User:" "$USER"
# Numeric output
printf "Usage: %.2fn" 3.141592
# Table output
printf "%-5s %sn" "CPU" "Usage"
printf "%-5s %d%%n" "core0" 42
printf "%-5s %d%%n" "core1" 37
# Multiple values, one format
printf "%s logged in at %sn" "$USER" "$TIME"
Au fur et à mesure que votre script grandit, vous commencez à apprécier ces fonctionnalités intéressantes.
Remplacement de l'écho par printf
Passer de echo à printf peut sembler intimidant au début, mais les cas d'utilisation les plus courants se traduisent clairement, et souvent de manière plus explicite. Le remplacement le plus simple consiste à imprimer du texte avec une nouvelle ligne. Avec echo, la nouvelle ligne est implicite. Avec printf, c'est explicite :
echo "Hello, world"
printf "Hello, worldn"
Cela peut paraître verbeux, mais cela est explicite n rend la sortie prévisible. Vous savez toujours quand une nouvelle ligne est ajoutée.
La suppression d'une nouvelle ligne est un autre cas courant où l'écho devient peu fiable. Certains shells prennent en charge echo -nd'autres ne se comportent pas de manière cohérente. Avec printfil n'y a aucune option à retenir. Vous omettez simplement la nouvelle ligne :
echo -n "Processing..."
printf "Processing..."
L'impression des variables est également plus sûre avec printf. Au lieu de vous fier aux règles d'expansion du shell, vous spécifiez exactement comment la variable doit être traitée :
echo $USER
printf "%sn" "$USER"
Cela évite les surprises lorsque les variables contiennent des espaces, des caractères spéciaux ou des valeurs inattendues.
8 astuces du shell Linux qui changent complètement le fonctionnement des commandes
Le shell fait bien plus que simplement exécuter des commandes. Voici comment Bash étend votre saisie en coulisse afin que vous puissiez écrire des commandes plus propres et plus fiables.
Là où printf se démarque vraiment, c'est lorsque vous avez besoin d'une sortie structurée. La combinaison de texte et de valeurs est simple :
echo "User: $USER | UID: $UID"
printf "User: %s | UID: %dn" "$USER" "$UID"
Avec printf, vous définissez explicitement comment chaque valeur doit être formatée, ce qui facilite la lecture et la maintenance des scripts. Faire la même chose avec echo devient rapidement compliqué ou fragile, surtout à mesure que les scripts se développent.
Même les séquences d'échappement sont plus prévisibles avec printf :
echo "Line 1nLine 2"
printf "Line 1nLine 2n"
Selon le shell, echo peut s'imprimer n littéralement. Mais printf ne le fait jamais.
Une fois que vous commencez à rédiger des résultats de cette manière, les avantages deviennent évidents. La commande printf ne devine pas ce que vous voulez. Il imprime exactement ce que vous spécifiez. Cela en fait une meilleure valeur par défaut pour les scripts, les journaux et toute sortie qui doit être fiable.
Quand utiliser lequel
Malgré ses bizarreries, echo n'est pas une mauvaise commande. En fait, la plupart des utilisateurs de Linux l'utilisent encore quotidiennement, et c'est tout à fait normal. Pour une utilisation rapide et interactive dans le terminal, echo est pratique. Si vous imprimez simplement une chaîne pour voir une valeur ou déboguer quelque chose brièvement, echo fait le travail avec un minimum de saisie.
Par exemple, dans une session shell interactive, cela est tout à fait raisonnable :
echo "$PATH"
Dans des situations comme celle-ci, la portabilité et le contrôle strict de la sortie n'ont généralement pas d'importance. Vous êtes le seul consommateur du résultat et vous pouvez immédiatement voir si quelque chose ne va pas.
Là où printf brille vraiment, c'est dans les scripts et tout ce qui est destiné à être réutilisé. Si la sortie est consommée par une autre commande, écrite dans un fichier ou si elle devrait se comporter de la même manière sur tous les systèmes, printf est le choix le plus sûr. Sa cohérence rend les scripts plus prévisibles et plus faciles à maintenir dans le temps.
En règle générale, utilisez echo pour une sortie rapide et interactive et des contrôles ponctuels. Utilisez printf dans les scripts, les journaux et partout où le format de sortie est important. Si jamais vous comptez sur des options d'écho ou des séquences d'échappement, c'est généralement le signe que printf est le meilleur outil.
5 surprises de terminaux cachés que vous pouvez essayer sur Ubuntu dès maintenant
Ces œufs de Pâques attendent d'être découverts dans Ubuntu Linux, si vous connaissez les bonnes commandes.
La commande echo a gagné sa place dans la boîte à outils Linux. C'est simple, familier et suffisant pour des vérifications rapides. Mais lorsque le rendement compte, la simplicité seule ne suffit pas. La commande printf vous offre cohérence, contrôle et clarté.
