Das funktioniert bei mir:
printf "%b" "\e[1;34mThis is a blue text.\e[0m"
Ab printf(1)
:
%b ARGUMENT as a string with '\' escapes interpreted, except that octal escapes are of the form \0 or \0NNN
Anstatt archaische Terminalcodes zu verwenden, darf ich die folgende Alternative vorschlagen. Es bietet nicht nur besser lesbaren Code, sondern ermöglicht es Ihnen auch, die Farbinformationen von den Formatbezeichnern zu trennen, so wie Sie es ursprünglich beabsichtigt haben.
blue=$(tput setaf 4)
normal=$(tput sgr0)
printf "%40s\n" "${blue}This text is blue${normal}"
Siehe meine Antwort HIER für zusätzliche Farben
Sie mischen die Teile zusammen, anstatt sie sauber zu trennen.
printf '\e[1;34m%-6s\e[m' "This is text"
Setzen Sie im Grunde die festen Dinge in das Format und die variablen Dinge in die Parameter.
Dies ist ein kleines Programm, um verschiedene Farben auf dem Terminal zu erhalten.
#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;
}