Bourne | Ash | #! | find | ARG_MAX | Shells | whatshell | portability | permissions | UUOC | ancient | - | ../Various | HOME
"$@" | echo/printf | set -e | test | tty defs | tty chars | $() vs ) | IFS | using siginfo | nanosleep | line charset | locale


Unprintable ASCII characters and TTYs

What happens when typing special "control sequences" like <ctrl-h>, <ctrl-d> etc.?

For convenience, "^X" means "<Ctrl-X>" in the following (ignoring the fact that you usually might use the lower case x).

About a possible origin of the "^"-notation, see also an article in a.f.c, <62097@bbn.BBN.COM> (local copy).


Some of these combinations are used rather frequently:

In fact you can type all nonprintable ASCII characters with this mechanism.

The above printable representations for these ASCII characters are determined with a simple logic operation by the terminal driver:

 <character code> XOR 0x40


A good illustration for the resulting "mapping" is the manual page ascii(5) from SunOS 5:

 | 0 NUL| 1 SOH| 2 STX| 3 ETX| 4 EOT| 5 ENQ| 6 ACK| 7 BEL|
 | 8 BS | 9 HT | 10 NL | 11 VT | 12 NP | 13 CR | 14 SO | 15 SI |
 | 16 DLE| 17 DC1| 18 DC2| 19 DC3| 20 DC4| 21 NAK| 22 SYN| 23 ETB|
 | 24 CAN| 25 EM | 26 SUB| 27 ESC| 28 FS | 29 GS | 30 RS | 31 US |
 ===============================================================
 | 32 SP | 33 ! | 34 " | 35 # | 36 $ | 37 % | 38 & | 39 ' |
 | 40 ( | 41 ) | 42 * | 43 + | 44 , | 45 - | 46 . | 47 / |
 | 48 0 | 49 1 | 50 2 | 51 3 | 52 4 | 53 5 | 54 6 | 55 7 |
 | 56 8 | 57 9 | 58 : | 59 ; | 60 < | 61 = | 62 > | 63 ? |
 ---------------------------------------------------------------
 | 64 @ | 65 A | 66 B | 67 C | 68 D | 69 E | 70 F | 71 G |
 | 72 H | 73 I | 74 J | 75 K | 76 L | 77 M | 78 N | 79 O |
 | 80 P | 81 Q | 82 R | 83 S | 84 T | 85 U | 86 V | 87 W |
 | 88 X | 89 Y | 90 Z | 91 [ | 92 \ | 93 ] | 94 ^ | 95 _ |
 ---------------------------------------------------------------
 | 96 ` | 97 a | 98 b | 99 c |100 d |101 e |102 f |103 g |
 |104 h |105 i |106 j |107 k |108 l |109 m |110 n |111 o |
 |112 p |113 q |114 r |115 s |116 t |117 u |118 v |119 w |
 |120 x |121 y |122 z |123 { |124 | |125 } |126 ~ |127 DEL|


However, some other combinations are usually immediately processed in the terminal driver itself.
They result in a signal, an EOF or interact with the flow control. See also stty(1).


Last but not least keep in mind:

If you want to type a control character literally (e.g. in an editor), then you need the "lnext" functionality (often ^V per default) in your tty driver. "lnext" is provided by all modern unix flavours.

Most shells change the stty(1) settings themselves. You will notice a different behaviour when putting the tty in a "rawer" mode, e.g. after just typing "cat<Return>".

Some shells interpret <ctrl-v> as "stty lnext" themselves (apparently for reasons of convenience), even if this capability has not been set in your TTY.


2002年06月17日, 2006年01月04日

AltStyle によって変換されたページ (->オリジナル) /