Kolor czerwony zdefiniowałem za pomocą tput
red=$(tput setaf 1)
pokolorować ostrzeżenia w moim programie. Działa to dobrze:
printf '%sfail\n' "$red"
# prints 'fail' in red
Ale pewnego razu chciałbym wydrukować sekwencję ucieczki taką, jaka jest, na przykład:
\ E [31mfail
Jak mam to zrobić? Wiem, że printf ma %q
flagę, ale ucieka przed innymi rzeczami, których nie chcę.
shell
escape-characters
printf
helpermethod
źródło
źródło
\E
, czy inne znaki sterujące?Odpowiedzi:
Dźwięki tak, jak chcesz przeciwieństwo drukując je dosłownie, chcesz te znaki ewakuacyjne konwertowany do druku formie opisowej jak
\E
i\033
,^[
...Jeśli to tylko (0x1b) znak ESC chcesz przekonwertować
\E
, a następnieksh93
,zsh
albobash
(zazwyczaj te same, które również obsługują że niestandardowe%q
), można zrobić:Lub potok do
sed $'s/\e/\\\\E/g'
Aby uzyskać bardziej ogólne podejście do konwertowania znaków innych niż graficzne, możesz użyć:
źródło
Użyj
od
,hexdump
,xxd
lub podobny do drukowania danych binarnych w postaci czytelnej dla człowieka. Na przykład:źródło
Możesz użyć
printf
bezpośrednio, npźródło