Answers:
听起来好像您想要按原样打印它们相反,您希望将那些转义字符转换为可打印的描述形式,例如\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
,还是其他控制字符?