1http://www.opengroup.org/onlinepubs/9699919799/
2Open Group Base Specifications Issue 7
3
4
5http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html
6Shell & Utilities
7
8It says that any of the standard utilities may be implemented
9as a regular shell built-in. It gives a list of utilities which
10are usually implemented that way (and some of them can only
11be implemented as built-ins, like "alias"):
12
13alias
14bg
15cd
16command
17false
18fc
19fg
20getopts
21jobs
22kill
23newgrp
24pwd
25read
26true
27umask
28unalias
29wait
30
31
32http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
33Shell Command Language
34
35It says that shell must implement special built-ins. Special built-ins
36differ from regular ones by the fact that variable assignments
37done on special builtin are *PRESERVED*. That is,
38
39VAR=VAL special_builtin; echo $VAR
40
41should print VAL.
42
43(Another distinction is that an error in special built-in should
44abort the shell, but this is not such a critical difference,
45and moreover, at least bash's "set" does not follow this rule,
46which is even codified in autoconf configure logic now...)
47
48List of special builtins:
49
50. file
51: [argument...]
52break [n]
53continue [n]
54eval [argument...]
55exec [command [argument...]]
56exit [n]
57export name[=word]...
58export -p
59readonly name[=word]...
60readonly -p
61return [n]
62set [-abCefhmnuvx] [-o option] [argument...]
63set [+abCefhmnuvx] [+o option] [argument...]
64set -- [argument...]
65set -o
66set +o
67shift [n]
68times
69trap n [condition...]
70trap [action condition...]
71unset [-fv] name...
72
73In practice, no one uses this obscure feature - none of these builtins
74gives any special reasons to play such dirty tricks.
75
76However. This section also says that *function invocation* should act
77similar to special built-in. That is, variable assignments
78done on function invocation should be preserved after function invocation.
79
80This is significant: it is not unthinkable to want to run a function
81with some variables set to special values. But because of the above,
82it does not work: variable will "leak" out of the function.
83