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

Manual of the Thompson Shell on Version 1

released under the license of Caldera

Dennis Ritchie provides the 1st edition manual on his pages in PDF format. See p. 12-14 for sh(1).
Here is plain text.

11/3/71							  SH (I)

NAME		sh -- shell (command interpreter)

SYNOPSIS	sh [ name [ arg ... [ arg  ] ] ]
			       1         9
DESCRIPTION	sh is the standard command interpreter. It is
		the program which reads and arranges the execu-
		tion of the command lines typed by most users.
		It may itself be called as a command to interpret
		files of command lines. Before discussing the
		arguments to the shell used as a command, the
		structure of command lines themselves will be

		Command lines are sequences of commands separated
		by command delimiters. Each command is a se-
		quence of non-blank command arguments separated
		by blanks.  The first argument specifies the name
		of a command to be executed.  Except for certain
		types of special arguments discussed below, the
		arguments other than the command name are simply
		passed to the invoked command.

		If the first argument represents the name of
		an executable file, it is invoked; otherwise the
		string "/bin/" is prepended to the argument.  (In
		this way the standard commands, which reside in
		"/bin," are found.) If this search too fails a
		diagnostic is printed.

		The remaining non-special arguments are simply
		passed to the command without further interpreta-
		tion by the shell.

		There are three command delimiters: the new
		line, ";", and "&". The semicolon ";" specifies
		sequential execution of the commands so
		separated; that is,
			coma; comb
		causes the execution first of command coma, then
		of comb.  The ampersand "&" causes simultaneous
			coma & comb
		causes coma to be called, followed immediately by
		comb without waiting for coma to finish.  Thus
		coma and comb execute simultaneously.  As a spe-
		cial case,
			coma &
		causes coma to be executed and the shell immedi-
		ately to request another command without waiting
		for coma.

11/3/71 SH (I) Two characters cause the immediately following string to be interpreted as a special argument to the shell itself, not passed to the command. An argument of the form "<arg" causes file arg to be used as the standard input file of the given command; an argument of the form ">arg" causes file "arg" to be used as the standard out- put file for the given command. If any argument contains either of the characters "?" or "*", it is treated specially as follows. The current directory is searched for files which match the given argument. The character "*" in an argument matches any string of characters in a file name (including the nullstring); "?" matches any single character in a file name. Other argument characters match only the same character in the file name. For example, "*" matches all file names; "?" matches all one-char- acter file names; "ab*.s" matches all file names beginning with "ab" and ending with ".s". If the argument with "*" or "?" also contains a "/", a slightly different procedure is used: instead of the current directory, the directory used is the one obtained by taking the argument up to the last "/" before a "*" or "?". The matching process matches the remainder of the argument after this "/" against the files in the derived directory. For example:, "/usr/dmr/a*.s" matches all files in directory "/usr/dmr" which begin with "a" and end with ".s". In any event, a list of names is obtained which match the argument. This list is sorted into alphabetical order, and the resulting sequence of arguments replaces the single argument containing the "*" or "?". The same process is carried out for each argument with a "*" or "?" (the result- ing lists are not merged) and finally the command is called with the resulting list of arguments. For example: directory /usr/dmr contains the files a1.s, a2.s, ..., a9.s. From any directory, the command as /usr/dmr/a?.s calls as with arguments /usr/dmr/a1.s, /usr/dmr/a2.s, ... /usr/dmr/a9.s in that order. The character "\" causes the immediately follo- wing character to lose any special meaning it may have to the shell; in this way "<", ">", and other characters meaningful to the shell may be passed as part of arguments. A special case of
11/3/71 SH (I) this feature allows the continuation of commands onto more than one line: a new-line preceded by "\" is translated into a blank. Sequences of characters enclosed in double (") or single (') quotes are also taken literally. When the shell is invoked as a command, it has additional string processing capabilities. Re- call that the form in which the shell is invoked is sh [ name [ arg ... [ arg ] ] ] 1 9 The name is the name of a file which will be read and interpreted. If not given, this subinstance of the shell will continue to read the standard input file. In the file, character sequences of the form "$n", where n is a digit 0, ..., 9, are replaced by the nth argument to the invocation of the shell (arg ). "$0" is replaced by name. n An end-of-file in the shell's input causes it to exit. A side effect of this fact means that the way to log out from UNIX is to type an end of file. FILES /etc/glob SEE ALSO [reference], which gives the theory of operation of the shell. DIAGNOSTICS "?" in case of any difficulty. The most common problem is inability to find the given command. Others: input file ("<") cannot be found; no more processes can be created (this will allevi- ate itself with the passage of time). Note that no diagnostic is given for inability to create an output (">") file; the standard output file has already been closed when the condition is discovered and there is no place to write the diagnostic. If a "*" or "?" is used, the glob routine is invoked; ittypes "No command" if it cannot find the given command, and "No match" if there were no files which matched an argument with "?" or "*". BUGS Better diagnostics should be provided. If a "*" or "?" is used, the command must be in /bin (Not, for example, in the user's directory.) This is actually a glob bug.
11/3/71 SH (I) OWNER dmr, ken

In later manuals, [reference] in section SEE ALSO is "The UNIX Time-sharing System"