Я определил красный цвет, используя tput
red=$(tput setaf 1)
раскрасить предупреждения в моей программе. Это прекрасно работает:
printf '%sfail\n' "$red"
# prints 'fail' in red
Но в одном случае я хотел бы распечатать escape-последовательность как есть, что-то вроде:
\ E [31mfail
Как бы я это сделал? Я знаю, что у printf есть %q
флаг, но он избегает других вещей, которые я не хочу.
shell
escape-characters
printf
helpermethod
источник
источник
\E
, или другие управляющие символы?Ответы:
Похоже, вы хотите, чтобы вы печатали их буквально, вы хотите, чтобы эти escape-символы были преобразованы в печатную описательную форму, например
\E
или\033
,^[
...Если вы хотите преобразовать только символ ESC (0x1b)
\E
, тоksh93
, используяzsh
илиbash
(как правило, те же, которые также поддерживают этот нестандартный%q
), вы можете сделать:Или труба к
sed $'s/\e/\\\\E/g'
Для более общего подхода к преобразованию неграфических символов вы можете использовать:
источник
Используйте
od
,hexdump
,xxd
или аналогичный для печати двоичных данных в читабельной форме. Например:источник
Вы можете использовать
printf
напрямую, например,источник