回答:
文字どおりに印刷するのではなく、エスケープ文字を\E
or \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
か、それとも他の制御文字ですか?