これは私にとってはうまくいきます:
printf "%b" "\e[1;34mThis is a blue text.\e[0m"
printf(1)
から :
%b ARGUMENT as a string with '\' escapes interpreted, except that octal escapes are of the form \0 or \0NNN
古風な端末コードを使用するのではなく、次の代替案をお勧めします。より読みやすいコードを提供するだけでなく、当初の意図どおりに色情報をフォーマット指定子から分離しておくこともできます。
blue=$(tput setaf 4)
normal=$(tput sgr0)
printf "%40s\n" "${blue}This text is blue${normal}"
追加の色については、こちらの回答を参照してください
パーツをきれいに分離するのではなく、混ぜ合わせています。
printf '\e[1;34m%-6s\e[m' "This is text"
基本的には、固定のものをフォーマットに、可変のものをパラメータに入れます。
これは、端末で異なる色を取得するための小さなプログラムです。
#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;
}