Cela fonctionne pour moi :
printf "%b" "\e[1;34mThis is a blue text.\e[0m"
À partir de printf(1)
:
%b ARGUMENT as a string with '\' escapes interpreted, except that octal escapes are of the form \0 or \0NNN
Plutôt que d'utiliser des codes terminaux archaïques, puis-je suggérer l'alternative suivante. Non seulement il fournit un code plus lisible, mais il vous permet également de séparer les informations de couleur des spécificateurs de format, comme vous l'aviez initialement prévu.
blue=$(tput setaf 4)
normal=$(tput sgr0)
printf "%40s\n" "${blue}This text is blue${normal}"
Voir ma réponse ICI pour des couleurs supplémentaires
Vous mélangez les pièces ensemble au lieu de les séparer proprement.
printf '\e[1;34m%-6s\e[m' "This is text"
En gros, mettez les éléments fixes dans le format et les éléments variables dans les paramètres.
Ceci est un petit programme pour obtenir différentes couleurs sur le terminal.
#include <stdio.h>
#define KNRM "\x1B[0m"
#define KRED "\x1B[31m"
#define KGRN "\x1B[32m"
#define KYEL "\x1B[33m"
#define KBLU "\x1B[34m"
#define KMAG "\x1B[35m"
#define KCYN "\x1B[36m"
#define KWHT "\x1B[37m"
int main()
{
printf("%sred\n", KRED);
printf("%sgreen\n", KGRN);
printf("%syellow\n", KYEL);
printf("%sblue\n", KBLU);
printf("%smagenta\n", KMAG);
printf("%scyan\n", KCYN);
printf("%swhite\n", KWHT);
printf("%snormal\n", KNRM);
return 0;
}