답변:
문자 그대로 인쇄하는 것과 반대되는 것처럼 들리면 이스케이프 문자를 인쇄 형식으로 \E
또는 \033
, ^[
...
로 변환하려는 ESC (0x1b) 문자 \E
인 경우 ksh93
, zsh
또는 bash
(일반적으로 해당 비표준을 지원하는 동일한 문자)로 변환 %q
할 수 있습니다.
printf '%s\n' "${red//$'\e'/\\E}"
또는 파이프 sed $'s/\e/\\\\E/g'
그래픽이 아닌 문자를 변환하는보다 일반적인 방법은 다음을 사용할 수 있습니다.
$ printf %s "$red" | od -A n -vt c # POSIX
033 [ 3 1 m
$ printf %s "$red" | sed -n l # POSIX
\033[31m$
$ printf '%s\n' "${(qqqq)red}" # zsh
$'\033[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
\E
문자입니까 아니면 다른 제어 문자입니까?