Parece que você quer o oposto de imprimi-las literalmente, deseja que esses caracteres de escape sejam convertidos em um formulário descritivo imprimível, como \E
ou 3
, ^[
...
Se for apenas o caractere ESC (0x1b) que você deseja converter em \E
, então com ksh93
, zsh
ou bash
(normalmente, os mesmos que também suportam esse% não padrão%q
), você pode fazer:
printf '%s\n' "${red//$'\e'/\E}"
Ou canalizar para sed $'s/\e/\\E/g'
Para uma abordagem mais genérica na conversão de caracteres não gráficos, você pode usar:
$ printf %s "$red" | od -A n -vt c # POSIX
033 [ 3 1 m
$ printf %s "$red" | sed -n l # POSIX
3[31m$
$ printf '%s\n' "${(qqqq)red}" # zsh
$'3[31m'
$ printf '%s\n' "$red" | cat -vt # some cat implementations
^[[31m
$ printf %s "$red" | uconv -x ':: [:Cc:]; ::Hex;' # ICU tools
\u001B[31m
$ printf %s "$red" | uconv -x ':: [:Cc:]; ::Name;' # ICU tools
\N{<control-001B>}[31m