C0 控制字符 —— BS、HT、LF、CR、BEL(单字节码)
无需 ESC 引导即可移动光标或触发事件的单字节 C0 控制字符。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x08 BS \x09 HT \x0a LF \x0d CR \x07 BEL\\033[
\010 / \011 / \012 / \015 / \007\\e[
\b / \t / \n / \r / \aESC [
BS / HT / LF / CR / BELhex
08 / 09 / 0a / 0d / 07说明
这五个单字节控制字符早于 ANSI/VT,至今所有终端仍直接响应它们:**BS**(0x08,`\b`)光标左移一格(不擦除 —— 配合空格再退格才能擦除,或使用 EL)。**HT**(0x09,`\t`)光标移到下一个 tab 停位(默认每 8 列)。**LF**(0x0a,`\n`)光标下移一行(在 `onlcr` tty 模式下还会回到第 1 列 —— Unix shell 依赖此特性,否则 `\n` 在 `stty -onlcr` 下会显得阶梯排列)。**CR**(0x0d,`\r`)光标回到当前行第 1 列 —— 进度条常用「`\r` + 重绘」模式。**BEL**(0x07,`\a`)发出可闻铃声或视觉闪烁,取决于终端设置;同时也是 OSC 字符串的事实标准终止符(见 OSC 0/2 与 OSC 8)。它们都不需要 `ESC` 字节 —— 属于继承自 ASCII(1963)/ ECMA-6 的 C0 控制集。
规范出处: ECMA-48 §8.2 (C0 set) / ASCII / ECMA-6
参数
| BS (0x08) | 退格 —— 光标左移 1 |
| HT (0x09) | 水平制表 —— 到下一个 tab 停位 |
| LF (0x0a) | 换行 —— 向下 1 行 |
| CR (0x0d) | 回车 —— 到第 1 列 |
| BEL (0x07) | 响铃 —— 可闻/可见提示;OSC 终止符 |
示例
printf '\rprogress: 50%%\r' # CR redraws current line\nprintf 'beep\a\n' # BEL rings the bellimport sys, time\nfor i in range(101):\n sys.stdout.write(f'\r{i}%'); sys.stdout.flush(); time.sleep(0.02)fmt.Print("\rprogress: 50%\r")process.stdout.write('\rprogress: 50%\r')printf("\rprogress: 50%%\r");终端支持
- xterm
- 支持
- Linux console (fbcon)
- 支持
- macOS Terminal.app
- 支持
- iTerm2
- 支持
- Windows Terminal
- 支持
- cmd.exe / ConPTY
- 支持
- kitty
- 支持
- alacritty
- 支持
- WezTerm
- 支持
- Ghostty
- 支持
- GNOME Terminal
- 支持
- Konsole
- 支持
- tmux
- 不支持
- GNU screen
- 不支持
| xterm | Linux console (fbcon) | macOS Terminal.app | iTerm2 | Windows Terminal | cmd.exe / ConPTY | kitty | alacritty | WezTerm | Ghostty | GNOME Terminal | Konsole | tmux | GNU screen |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 |