10 Portable Shell Programming
When writing your own checks, there are some shell-script programming
techniques you should avoid in order to make your code portable. The
Bourne shell and upward-compatible shells like the Korn shell and Bash
have evolved over the years, but to prevent trouble, do not take
advantage of features that were added after Unix version 7, circa
1977 (see Systemology).
You should not use shell functions, aliases, negated character
classes, or other features that are not found in all Bourne-compatible
shells; restrict yourself to the lowest common denominator. Even
unset is not supported by all shells!
Some ancient systems have quite
small limits on the length of the ‘#!’ line; for instance, 32
bytes (not including the newline) on SunOS 4.
A few ancient 4.2BSD based systems (such as Dynix circa 1984)
required a single space between the ‘#!’ and the ‘/’.
However, these ancient systems are no longer of practical concern.
The set of external programs you should run in a configure script
is fairly small. See Utilities in Makefiles, for the list. This
restriction allows users to start out with a fairly small set of
programs and build the rest, avoiding too many interdependencies between
packages.
Some of these external utilities have a portable subset of features; see
Limitations of Usual Tools.
There are other sources of documentation about shells. The
specification for the Posix
Shell Command Language, though more generous than the restrictive shell
subset described above, is fairly portable nowadays. Also please see
the Shell FAQs.
|