hel*_*hod 9 shell escape-characters printf
我已经使用 tput 定义了红色
red=$(tput setaf 1)
Run Code Online (Sandbox Code Playgroud)
为我的程序中的警告着色。这工作正常:
printf '%sfail\n' "$red"
# prints 'fail' in red
Run Code Online (Sandbox Code Playgroud)
但有一次我想按原样打印出转义序列,例如:
\E[31mfail
我该怎么做?我知道 printf 有一个%q
标志,但它逃脱了我不想的其他东西。
Sté*_*las 10
听起来您想要从字面上打印它们的反面,您想要将这些转义字符转换为可打印的描述形式,例如\E
or \033
, ^[
...
如果它只是您想要转换为的 ESC (0x1b) 字符\E
,则使用ksh93
,zsh
或bash
(通常,也支持非标准的相同%q
),您可以执行以下操作:
printf '%s\n' "${red//$'\e'/\\E}"
Run Code Online (Sandbox Code Playgroud)
或管道到 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
Run Code Online (Sandbox Code Playgroud)
使用od
、hexdump
、xxd
或类似方法以人类可读的形式打印二进制数据。例如:
$ tput setaf 1 | od -c
0000000 033 [ 3 1 m
0000005
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8436 次 |
最近记录: |