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
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:
^H
is BackSpace
and ^?
is
Delete
. This can help if your stty(1)
settings are wrong.
^G
can "ring the Bell".
^[
is Escape
(like ^3
)
can be helpful for "vi
" users.
^J
is Newline
(or
Linefeed
). It's related to ^M
(Carriage Return
), and might be helpful
for a <Return> with a messed up TTY.
^]
is the telnet(1)
escape character
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|
You can reach the non-printable equivalent at the upper end of this table by holding <ctrl> and pressing an appropriate character from below.
^@
or ^<space>
or ^`
,
^A
^Z
Now continue with '[
', or jump "up" to the '3',
^[
or ^{
or ^3
^_
or ^/
^?
.^2
^@
without holding Shift on a US keyboard)
<ctrl>ASCII-40
until
<ctrl>ASCII-46
just produce the literal character itself.
shift
depends on
your very terminal(-emulator). Originally, it was ignored.
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)
.
^C
- SIGINT, the interrupt character
^Z
- SIGTSTOP, suspending
^D
- results in EOF, "end of file"
^V
- handling of the next character, "literal next"
^S
- stops output
^Q
- restarts output
^H
or ^?
- erase functionality
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.