Module Name:    src
Committed By:   uwe
Date:           Thu Mar 15 01:20:43 UTC 2018

Modified Files:
        src/bin/sh: sh.1

Log Message:
Start adding more gaudy markup.  Use .Li or .Dv when referring to
parameters.  Use more .Ic and .Ar when defining syntax.

The manual is still rather inconsistent e.g. when referring to
parameters where it randomly uses both $0 and 0 or $@ and @ - but I'm
not shaving that yak at least for now.


To generate a diff of this commit:
cvs rdiff -u -r1.192 -r1.193 src/bin/sh/sh.1

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/bin/sh/sh.1
diff -u src/bin/sh/sh.1:1.192 src/bin/sh/sh.1:1.193
--- src/bin/sh/sh.1:1.192	Wed Mar 14 10:38:52 2018
+++ src/bin/sh/sh.1	Thu Mar 15 01:20:43 2018
@@ -1,4 +1,4 @@
-.\"	$NetBSD: sh.1,v 1.192 2018/03/14 10:38:52 uwe Exp $
+.\"	$NetBSD: sh.1,v 1.193 2018/03/15 01:20:43 uwe Exp $
 .\" Copyright (c) 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
 .\"
@@ -196,8 +196,12 @@ nor
 .Fl s
 was given, then the shell treats the first argument
 as the name of a file from which to read commands (a shell script).
-This also becomes $0 and the remaining arguments are set as the
-positional parameters of the shell ($1, $2, etc).
+This also becomes
+.Li $0
+and the remaining arguments are set as the
+positional parameters of the shell
+.Li ( $1 , $2 ,
+etc).
 Otherwise, if
 .Fl c
 was given, then the first argument, which must exist,
@@ -205,14 +209,22 @@ is taken to be a string of
 .Nm
 commands to execute.
 Then if any additional arguments follow the command string,
-those arguments become $0, $1, ...
+those arguments become
+.Li $0 , $1 ,
+\&...
 Otherwise, if additional arguments were given
 (which implies that
 .Fl s
 was set)
-those arguments become $1, $2, ...
-If $0 has not been set by the preceding processing, it
-will be set to argv[0] as passed to the shell, which will
+those arguments become
+.Li $1 , $2 ,
+\&...
+If
+.Li $0
+has not been set by the preceding processing, it
+will be set to
+.Va argv\^ Ns [ 0 ]
+as passed to the shell, which will
 usually be the name of the shell itself.
 If
 .Fl s
@@ -273,15 +285,19 @@ Don't overwrite existing files with
 Read commands from the
 .Ar command_string
 operand instead of, or in addition to, from the standard input.
-Special parameter 0 will be set from the
+Special parameter
+.Dv 0 \" $0
+will be set from the
 .Ar command_name
-operand if given, and the positional parameters ($1, $2, etc.)
+operand if given, and the positional parameters
+.Li ( $1 , $2 ,
+etc.)
 set from the remaining argument operands, if any.
 .Fl c
 is only available at invocation, it cannot be
 .Ic set ,
 and there is no form using
-.Dq \&+ .
+.Dq Cm \&+ .
 .It Fl E Em emacs
 Enable the built-in emacs style
 command line editor (disables
@@ -577,17 +593,20 @@ single quotes in a single-quoted string)
 .Ss Double Quotes
 Enclosing characters within double quotes preserves the literal
 meaning of all characters except dollar sign
-.Pq $ ,
+.Pq Li \&$ ,
 backquote
-.Pq ` ,
+.Pq Li \&` ,
 and backslash
-.Pq \e .
+.Pq Li \e .
 The backslash inside double quotes is historically weird, and serves to
 quote only the following characters (and these not in all contexts):
 .Dl $  `  \*q  \e  <newline> ,
 where a backslash newline is a line continuation as above.
 Otherwise it remains literal.
-.Ss Dollar Single Quotes (\&$'...')
+.\"
+.\"
+.Ss Dollar Single Quotes ( Li \&$'...' )
+.\"
 .Bd -filled -offset indent
 .Bf Em
 Note: this form of quoting is still somewhat experimental,
@@ -600,10 +619,10 @@ adopted text differ.
 .Pp
 Enclosing characters in a matched pair of single quotes, with the
 first immediately preceded by an unquoted dollar sign
-.Pq \&$
+.Pq Li \&$
 provides a quoting mechanism similar to single quotes, except
 that within the sequence of characters, any backslash
-.Pq \e ,
+.Pq Li \e ,
 is an escape character, which causes the following character to
 be treated specially.
 Only a subset of the characters that can occur in the string
@@ -614,14 +633,14 @@ in strings in the C programming language
 .Pp
 The following characters are treated literally when following
 the escape character (backslash):
-.Dl \e \&' \&"
+.Dl \e \&' \(dq
 The sequence
-.Dq \e\e
+.Dq Li \e\e
 allows the escape character (backslash) to appear in the string literally.
-.Dq \e'
+.Dq Li \e'
 allows a single quote character into the string, such an
 escaped single quote does not terminate the quoted string.
-.Dq \e"
+.Dq Li \e\(dq
 is for compatibility with C strings, the double quote has
 no special meaning in a shell C-style string,
 and does not need to be escaped, but may be.
@@ -659,7 +678,7 @@ is vertical tab (0x13).
 In addition to those there are 5 forms that need additional
 data, which is obtained from the subsequent characters.
 An escape
-.Pq \e
+.Pq Li \e
 followed by one, two or three, octal digits
 .Po So 0 Sc Ns \&.. Ns So 7 Sc Ns Pc
 is processed to form an 8 bit character value.
@@ -687,7 +706,9 @@ characters as long as they remain valid 
 Consequently, users should ensure that the character
 following the hex escape sequence is something other than
 a hex digit.
-One way to achieve this is to end the $'...' string immediately
+One way to achieve this is to end the
+.Li $'...'
+string immediately
 after the final hex digit, and then, immediately start
 another, so
 .Dl \&$'\ex33'$'4...'
@@ -700,9 +721,9 @@ whereas
 in some other shells would be the hex value 0x334 (10, or more, bits).
 .Pp
 There are two escape sequences beginning with
-.Sq \eu
+.Sq Li \eu
 or
-.Sq \eU .
+.Sq Li \eU .
 The former is followed by from 1 to 4 hex digits, the latter by
 from 1 to 8 hex digits.
 Leading zeros can be used to pad the sequences to the maximum
@@ -728,30 +749,30 @@ character (backslash), followed by
 be an alphabetic character (a letter), or one of the following:
 .Dl \&@ \&[ \&\e \&] \&^ \&_ \&?
 Other than
-.Sq \ec?
+.Sq Li \ec?
 the value obtained is the least significant 5 bits of the
 ASCII value of the character following the
-.Sq \ec
+.Sq Li \ec
 escape sequence.
 That is what is commonly known as the
 .Dq control
 character obtained from the given character.
 The escape sequence
-.Sq \ec?
+.Sq Li \ec?
 yields the ASCII DEL character (0x7F).
 Note that to obtain the ASCII FS character (0x1C) this way,
 .Pq "that is control-\e"
 the trailing
-.Sq \e
+.Sq Li \e
 must be escaped itself, and so for this one case, the full
 escape sequence is
-.Dq \ec\e\e .
+.Dq Li \ec\e\e .
 The sequence
-.Dq \ec\eX
+.Dq Li \ec\e Ns Ar X\^
 where
-.Sq X
+.Sq Ar X\^
 is some character other than
-.Sq \e
+.Sq Li \e
 is reserved for future use, its meaning is unspecified.
 In this
 .Nm
@@ -759,12 +780,18 @@ an error is generated.
 .Pp
 If any of the preceding escape sequences generate the value
 .Sq \e0
-(a NUL character) that character, and all that follow in the
-same $'...' string, are omitted from the resulting word.
-.Pp
-After the $'...' string has had any included escape sequences
+(a NUL character) that character, and all that follow in the same
+.Li $'...'
+string, are omitted from the resulting word.
+.Pp
+After the
+.Li $'...'
+string has had any included escape sequences
 converted, it is treated as if it had been a single quoted string.
+.\"
+.\"
 .Ss Reserved Words
+.\"
 Reserved words are words that have special meaning to the
 shell and are recognized at the beginning of a line and
 after a control operator.
@@ -777,7 +804,10 @@ The following are reserved words:
 .El
 .Pp
 Their meanings are discussed later.
+.\"
+.\"
 .Ss Aliases
+.\"
 An alias is a name and corresponding value set using the
 .Ic alias
 built-in command.
@@ -801,7 +831,9 @@ Aliases provide a convenient way for nai
 commands without having to learn how to create functions with arguments.
 They can also be used to create lexically obscure code.
 This use is strongly discouraged.
+.\"
 .Ss Commands
+.\"
 The shell interprets the words it reads according to a language, the
 specification of which is outside the scope of this man page (refer to the
 BNF in the POSIX 1003.2 document).
@@ -810,13 +842,16 @@ word of the line (or after a control ope
 then the shell has recognized a simple command.
 Otherwise, a complex
 command or some other special construct may have been recognized.
+.\"
+.\"
 .Ss Simple Commands
+.\"
 If a simple command has been recognized, the shell performs
 the following actions:
 .Bl -enum -offset indent
 .It
 Leading words of the form
-.Dq name=value
+.Dq Ar name Ns Li = Ns Ar value
 are stripped off, the value is expanded, as described below,
 and the results are assigned to the environment of the simple command.
 Redirection operators and their arguments (as described below) are
@@ -829,31 +864,34 @@ The first remaining word is considered t
 command is located.
 Any remaining words are considered the arguments of the command.
 If no command name resulted, then the
-.Dq name=value
+.Dq Ar name Ns Li = Ns Ar value
 variable assignments recognized in item 1 affect the current shell.
 .It
 Redirections are performed, from first to last, in the order given,
 as described in the next section.
 .El
+.\"
+.\"
 .Ss Redirections
+.\"
 Redirections are used to change where a command reads its input or sends
 its output.
 In general, redirections open, close, or duplicate an
 existing reference to a file.
 The overall format used for redirection is:
 .Pp
-.Dl [n] Ns Va redir-op Ar file
+.Dl Oo Ar n Oc Ns Va redir-op Ar file
 .Pp
 where
 .Va redir-op
 is one of the redirection operators mentioned previously.
 The following is a list of the possible redirections.
 The
-.Bq n
+.Op Ar n
 is an optional number, as in
-.Sq 3
+.Sq Li 3
 (not
-.Sq Bq 3 ) ,
+.Li [3] ) ,
 that refers to a file descriptor.
 If present it must occur immediately before the redirection
 operator, with no intervening white space, and becomes a
@@ -929,9 +967,9 @@ descriptor n if it is specified.
 If the delimiter as specified on the initial line is
 quoted, then the here-doc-text is treated literally; otherwise, the text is
 treated much like a double quoted string, except that
-.Sq \&"
+.Sq Li \(dq
 characters have no special meaning, and are not escaped by
-.Sq \&\e ,
+.Sq Li \&\e ,
 and is subjected to parameter expansion, command substitution, and arithmetic
 expansion as described in the
 .Sx Word Expansions
@@ -943,14 +981,21 @@ instead of
 then leading tabs in all lines in the here-doc-text, including before the
 end delimiter, are stripped.
 If the delimiter is not quoted, lines in here-doc-text that end with
-an unquoted \e are joined to the following line, the \e and following
+an unquoted
+.Li \e
+are joined to the following line, the
+.Li \e
+and following
 newline are simply removed while reading the here-document,
 which thus guarantees
 that neither of those lines can be the end delimiter.
 .Pp
 It is a syntax error for the end of the input file (or string) to be
 reached before the delimiter is encountered.
+.\"
+.\"
 .Ss Search and Execution
+.\"
 There are three types of commands: shell functions, built-in commands, and
 normal programs \(em and the command is searched for (by name) in that order.
 A command that contains a slash
@@ -959,7 +1004,9 @@ in its name is always a normal program.
 They each are executed in a different way.
 .Pp
 When a shell function is executed, all of the shell positional parameters
-(except $0, which remains unchanged) are set to the arguments of the shell
+(except
+.Li $0 ,
+which remains unchanged) are set to the arguments of the shell
 function.
 The variables which are explicitly placed in the environment of
 the command (by placing assignments to them before the function name) are
@@ -980,7 +1027,11 @@ described in the next section).
 When a normal program is executed, the shell runs the program,
 passing the arguments and the environment to the program.
 If the program is not a normal executable file, and if it does
-not begin with the "magic number" whose ASCII representation is "#!", so
+not begin with the
+.Dq magic number
+whose ASCII representation is
+.Dq Li "#!" ,
+so
 .Xr execve 2
 returns
 .Er ENOEXEC
@@ -993,8 +1044,12 @@ remembered by the child.
 .Pp
 Note that previous versions of this document and the source code itself
 misleadingly and sporadically refer to a shell script without a magic
-number as a "shell procedure".
+number as a
+.Dq shell procedure .
+.\"
+.\"
 .Ss Path Search
+.\"
 When locating a command, the shell first looks to see if it has a shell
 function by that name.
 Then it looks for a built-in command by that name.
@@ -1059,19 +1114,22 @@ allows new simple commands to be created
 .Pp
 Unless otherwise stated, the exit status of a list
 is that of the last simple command executed by the list.
+.\"
+.\"
 .Ss Pipelines
+.\"
 A pipeline is a sequence of one or more commands separated
 by the control operator
-.Sq \&| ,
+.Sq Ic \(ba ,
 and optionally preceded by the
-.Dq \&!
+.Dq Ic \&!
 reserved word.
 Note that
-.Sq \&|
+.Sq Ic \(ba
 is an operator, and so is recognized anywhere it appears unquoted,
 it does not require surrounding white space or other syntax elements.
 On the other hand
-.Dq \&!
+.Dq Ic \&!
 being a reserved word, must be separated from adjacent words by
 white space (or other operators, perhaps redirects) and is only
 recognized as the reserved word when it appears in a command word
@@ -1086,7 +1144,7 @@ as is the standard input of the first co
 .Pp
 The format for a pipeline is:
 .Pp
-.Dl [!] command1 [ \&| command2 ...]
+.Dl [!] command1 Op Li \&| command2 No ...
 .Pp
 The standard output of command1 is connected to the standard input of
 command2.
@@ -1115,11 +1173,15 @@ the pipeline status is the exit
 status of the last command in the pipeline,
 and the exit status of any other commands in the pipeline is ignored.
 .Pp
-If the reserved word ! precedes the pipeline, the exit status
+If the reserved word
+.Dq Ic \&!
+precedes the pipeline, the exit status
 becomes the logical NOT of the pipeline status as determined above.
 That is, if the pipeline status is zero, the exit status is 1;
 if the pipeline status is other than zero, the exit status is zero.
-If there is no ! reserved word, the pipeline status becomes the exit status.
+If there is no
+.Dq Ic \&!
+reserved word, the pipeline status becomes the exit status.
 .Pp
 Because pipeline assignment of standard input or standard output or both
 takes place before redirection, it can be modified by redirection.
@@ -1136,13 +1198,17 @@ it executes in the current shell \(em bu
 environment is wiped).
 .Pp
 A pipeline is a simple case of an AND-OR-list (described below.)
-A ; or
+A
+.Li \&;
+or
 .Aq newline
 terminator causes the preceding pipeline, or more generally,
 the preceding AND-OR-list to be executed sequentially;
 that is, the shell executes the commands, and waits for them
 to finish before proceeding to following commands.
-An & terminator causes asynchronous (background) execution
+An
+.Li \&&
+terminator causes asynchronous (background) execution
 of the preceding AND-OR-list (see the next paragraph below).
 The exit status of an asynchronous AND-OR-list is zero.
 The actual status of the commands,
@@ -1150,26 +1216,34 @@ after they have completed,
 can be obtained using the
 .Ic wait
 built-in command described later.
-.Ss Background Commands \(em &
+.\"
+.\"
+.Ss Background Commands \(em Ic \&&
+.\"
 If a command, pipeline, or AND-OR-list
-is terminated by the control operator ampersand (&), the
+is terminated by the control operator ampersand
+.Pq Li \&& ,
+the
 shell executes the command asynchronously \(em that is, the shell does not
 wait for the command to finish before executing the next command.
 .Pp
 The format for running a command in background is:
 .Pp
-.Dl command1 & [command2 & ...]
+.Dl command1 & Op Li command2 & No ...
 .Pp
 If the shell is not interactive, the standard input of an asynchronous
 command is set to
 .Pa /dev/null .
 The process identifier of the most recent command started in the
 background can be obtained from the value of the special parameter
-.Dq \&!
+.Dq Dv \&! \" $!
 (see
 .Sx Special Parameters )
 provided it is accessed before the next asynchronous command is started.
+.\"
+.\"
 .Ss Lists \(em Generally Speaking
+.\"
 A list is a sequence of one or more commands separated by newlines,
 semicolons, or ampersands, and optionally terminated by one of these three
 characters.
@@ -1185,27 +1259,30 @@ If command is followed by an ampersand, 
 command and immediately proceeds to the next command; otherwise it waits
 for the command to terminate before proceeding to the next one.
 A newline is equivalent to a
-.Sq \&;
+.Sq Li \&;
 when no other operator is present, and the command being input
 could syntactically correctly be terminated at the point where
 the newline is encountered, otherwise it is just whitespace.
+.\"
+.\"
 .Ss AND-OR Lists (Short-Circuit List Operators)
-.Dq &&
+.\"
+.Dq Li \&&&
 and
-.Dq ||
+.Dq Li \&||
 are AND-OR list operators.
 After executing the commands that precede the
-.Dq &&
+.Dq Li \&&&
 the subsequent command is executed
 if and only if the exit status of the preceding command(s) is zero.
-.Dq ||
+.Dq Li \&||
 is similar, but executes the subsequent command if and only if the exit status
 of the preceding command is nonzero.
 If a command is not executed, the exit status remains unchanged
 and the following AND-OR list operator (if any) uses that status.
-.Dq &&
+.Dq Li \&&&
 and
-.Dq ||
+.Dq Li \&||
 both have the same priority.
 Note that these operators are left-associative, so
 .Dl true || echo bar && echo baz
@@ -1213,19 +1290,23 @@ writes
 .Dq baz
 and nothing else.
 This is not the way it works in C.
-.Ss Flow-Control Constructs \(em if, while, until, for, case
+.\"
+.\"
+.Ss Flow-Control Constructs \(em Ic if , while , until , for , case
+.\"
 These commands are instances of compound commands.
 The syntax of the
 .Ic if
 command is
 .Bd -literal -offset indent
-if list
-then list
-[ elif list
-then    list ] ...
-[ else list ]
-fi
+.Ic if Ar list
+.Ic then Ar list
+.Ic [ elif Ar list
+.Ic then  Ar list ] No ...
+.Ic [ else Ar list ]
+.Ic fi
 .Ed
+.Pp
 The first list is executed, and if the exit status of that list is zero,
 the list following the
 .Ic then
@@ -1244,9 +1325,9 @@ The syntax of the
 .Ic while
 command is
 .Bd -literal -offset indent
-while list
-do   list
-done
+.Ic while Ar list
+.Ic do Ar list
+.Ic done
 .Ed
 .Pp
 The two lists are executed repeatedly while the exit status of the
@@ -1263,12 +1344,14 @@ The syntax of the
 .Ic for
 command is
 .Bd -literal -offset indent
-for variable [ in word ... ]
-do   list
-done
+.Ic for Ar variable Op Ic in Ar word No ...
+.Ic do Ar list
+.Ic done
 .Ed
 .Pp
-The words are expanded, or "$@" if
+The words are expanded, or
+.Li \*q$@\*q
+if
 .Ic in
 (and the following words) is not present,
 and then the list is executed repeatedly with the
@@ -1292,8 +1375,8 @@ and
 .Ic continue
 commands is
 .Bd -literal -offset indent
-break [ num ]
-continue [ num ]
+.Ic break Op Ar num
+.Ic continue Op Ar num
 .Ed
 .Pp
 .Ic break
@@ -1306,7 +1389,7 @@ or
 loops.
 .Ic continue
 breaks execution of the
-.Ar num\-1
+.Ar num\^ Ns -1
 innermost
 .Ic for , while ,
 or
@@ -1322,11 +1405,11 @@ The syntax of the
 .Ic case
 command is
 .Bd -literal -offset indent
-case word in
-[(] pattern ) [ list ] ;&
-[(] pattern ) [ list ] ;;
-\&...
-esac
+.Ic case Ar word Ic in
+.Oo Ic \&( Oc  Ar pattern Ns Ic \&) Oo Ar list Oc Ic \&;&
+.Oo Ic \&( Oc  Ar pattern Ns Ic \&) Oo Ar list Oc Ic \&;;
+.No \&...
+.Ic esac
 .Ed
 .Pp
 The pattern can actually be one or more patterns (see
@@ -1335,19 +1418,22 @@ described later), separated by
 .Dq \(or
 characters.
 .Pp
-Word is expanded and matched against each pattern in turn,
+.Ar word
+is expanded and matched against each
+.Ar pattern
+in turn,
 from first to last,
 with each pattern being expanded just before the match is attempted.
 When a match is found, pattern comparisons cease, and the associated
-.Dq list ,
+.Ar list ,
 if given,
 is evaluated.
 If the list is terminated with
-.Dq \&;&
+.Dq Ic \&;&
 execution then falls through to the following list, if any,
 without evaluating its pattern, or attempting a match.
 When a list terminated with
-.Dq \&;;
+.Dq Ic \&;;
 has been executed, or when
 .Ic esac
 is reached, execution of the
@@ -1355,11 +1441,14 @@ is reached, execution of the
 statement is complete.
 The exit status is that of the last command executed
 from the last list evaluated, if any, or zero otherwise.
+.\"
+.\"
 .Ss Grouping Commands Together
+.\"
 Commands may be grouped by writing either
-.Dl (list)
+.Dl Ic \&( Ns Ar list Ns Ic \&)
 or
-.Dl { list; }
+.Dl Ic \&{ Ar list Ns Ic \&; \&}
 These also form compound commands.
 .Pp
 Note that while parentheses are operators, and do not require
@@ -1369,7 +1458,9 @@ closing brace must occur in a position w
 otherwise appear.
 .Pp
 The first of these executes the commands in a sub-shell.
-Built-in commands grouped into a (list) will not affect the current shell.
+Built-in commands grouped into a
+.Li \&( Ns Ar list Ns \&)
+will not affect the current shell.
 The second form does not fork another shell so is slightly more efficient,
 and allows for commands which do affect the current shell.
 Grouping commands together this way allows you to redirect
@@ -1379,14 +1470,17 @@ their output as though they were one pro
 .Ed
 .Pp
 Note that
-.Dq }
+.Dq Ic }
 must follow a control operator (here,
-.Dq \&; )
+.Dq Ic \&; )
 so that it is recognized as a reserved word and not as another command argument.
+.\"
+.\"
 .Ss Functions
+.\"
 The syntax of a function definition is
 .Pp
-.Dl name ( ) command [ redirect... ]
+.Dl Ar name Ns Ic \&() Ar command Op Ar redirect No ...
 .Pp
 A function definition is an executable statement; when executed it
 installs a function named name and returns an exit status of zero.
@@ -1400,7 +1494,7 @@ As an extension, this shell also allows 
 (or even another function definition) to be
 used, though users should be aware this is non-standard syntax.
 This means that
-.Dl l() ls "$@"
+.Dl l() ls \*q$@\*q
 works to make
 .Dq l
 an alternative name for the
@@ -1473,10 +1567,10 @@ When starting up, the shell turns all th
 variables into shell variables, and exports them.
 New variables can be set using the form
 .Pp
-.Dl name=value
+.Dl Ar name Ns Li = Ns Ar value
 .Pp
 Variables set by the user must have a name consisting solely of
-alphabetics, numerics, and underscores - the first of which must not be
+alphabetics, numerics, and underscores \(em the first of which must not be
 numeric.
 A parameter can also be denoted by a number or a special
 character as explained below.
@@ -1491,22 +1585,27 @@ built-in can also be used to set or rese
 can be used to manipulate the list.
 .Pp
 To refer to the 10th (and later) positional parameters,
-the form ${n} must be used.
+the form
+.Li \&${ Ns Ar n Ns Li \&}
+must be used.
 Without the braces, a digit following
 .Dq $
 can only refer to one of the first 9 positional parameters,
 or the special parameter
-.Dq 0 .
+.Dv 0 . \" $0
 The word
-.Dq $10
+.Dq Li $10
 is treated identically to
-.Dq ${1}0 .
+.Dq Li ${1}0 .
+.\"
+.\"
 .Ss Special Parameters
+.\"
 A special parameter is a parameter denoted by one of the following special
 characters.
 The value of the parameter is listed next to its character.
 .Bl -tag -width thinhyphena
-.It *
+.It Dv *
 Expands to the positional parameters, starting from one.
 When the
 expansion occurs within a double-quoted string it expands to a single
@@ -1518,52 +1617,62 @@ variable, or by a
 if
 .Ev IFS
 is unset.
-.It @
+.It Dv @
 Expands to the positional parameters, starting from one.
 When the expansion occurs within double quotes, each positional
 parameter expands as a separate argument.
 If there are no positional parameters, the
-expansion of @ generates zero arguments, even when @ is
-double-quoted.
+expansion of @ generates zero arguments, even when
+.Dv @
+is double-quoted.
 What this basically means, for example, is
-if $1 is
+if
+.Li $1
+is
 .Dq abc
-and $2 is
-.Dq def ghi ,
+and
+.Li $2
+is
+.Dq def\ ghi ,
 then
-.Qq $@
+.Li \*q$@\*q
 expands to
 the two arguments:
 .Pp
 .Sm off
 .Dl \*q abc \*q \  \*q def\ ghi \*q
 .Sm on
-.It #
+.It Dv #
 Expands to the number of positional parameters.
-.It \&?
+.It Dv \&?
 Expands to the exit status of the most recent pipeline.
-.It \- (Hyphen, or minus.)
+.It Dv \- No (hyphen, or minus)
 Expands to the current option flags (the single-letter
 option names concatenated into a string) as specified on
 invocation, by the set built-in command, or implicitly
 by the shell.
-.It $
+.It Dv $
 Expands to the process ID of the invoked shell.
-A sub-shell retains the same value of $ as its parent.
-.It \&!
+A sub-shell retains the same value of
+.Dv $
+as its parent.
+.It Dv \&!
 Expands to the process ID of the most recent background
 command executed from the current shell.
 For a pipeline, the process ID is that of the last command in the pipeline.
 If no background commands have yet been started by the shell, then
-.Dq \&!
+.Dq Dv \&!
 will be unset.
 Once set, the value of
-.Dq \&!
+.Dq Dv \&!
 will be retained until another background command is started.
-.It 0 (Zero.)
+.It Dv 0 No (zero)
 Expands to the name of the shell or shell script.
 .El
+.\"
+.\"
 .Ss Word Expansions
+.\"
 This section describes the various expansions that are performed on words.
 Not all expansions are performed on every word, as explained later.
 .Pp
@@ -1573,8 +1682,9 @@ single field.
 It is only field splitting or pathname expansion that can
 create multiple fields from a single word.
 The single exception to this
-rule is the expansion of the special parameter @ within double quotes, as
-was described above.
+rule is the expansion of the special parameter
+.Dv @ \" $@
+within double quotes, as was described above.
 .Pp
 The order of word expansion is:
 .Bl -enum
@@ -1608,7 +1718,7 @@ and are replaced with the pathname of th
 If the user name is missing (as in
 .Pa ~/foobar ) ,
 the tilde is replaced with the value of the
-.Va HOME
+.Dv HOME
 variable (the current user's home directory).
 .Pp
 In variable assignments,
@@ -1654,7 +1764,7 @@ pathname expansion is not performed on t
 .It
 field splitting is not performed on the results of the
 expansion, with the exception of the special rules for
-.Dv @ .
+.Dv @ . \" $@
 .El
 .Pp
 In addition, a parameter expansion where braces are used,
@@ -1796,11 +1906,12 @@ has with
 .\"
 .\"
 .Ss Command Substitution
+.\"
 Command substitution allows the output of a command to be substituted in
 place of the command (and surrounding syntax).
 Command substitution occurs when the command is enclosed as follows:
 .Pp
-.Dl $(command)
+.Dl Ic $( Ns Ar command Ns Ic \&)
 .Pp
 or
 .Po
@@ -1808,7 +1919,7 @@ or
 version
 .Pc :
 .Pp
-.Dl `command`
+.Dl Ic \&` Ns Ar command Ns Ic \&`
 .Pp
 The shell expands the command substitution by executing command in a
 sub-shell environment and replacing the command substitution with the
@@ -1824,12 +1935,15 @@ they may be translated into
 depending on the value of
 .Ev IFS
 and any quoting that is in effect.)
+.\"
+.\"
 .Ss Arithmetic Expansion
+.\"
 Arithmetic expansion provides a mechanism for evaluating an arithmetic
 expression and substituting its value.
 The format for arithmetic expansion is as follows:
 .Pp
-.Dl $((expression))
+.Dl Ic $(( Ns Ar expression Ns Ic \&))
 .Pp
 The expression in an arithmetic expansion is treated as if it were in
 double quotes, except that a double quote character inside the expression
@@ -1903,12 +2017,15 @@ and the struct and array referencing bin
 .Dq \&->
 and
 .Dq \&[ .
+.\"
+.\"
 .Ss White Space Splitting (Field Splitting)
+.\"
 After parameter expansion, command substitution, and
 arithmetic expansion the shell scans the results of
 expansions and substitutions that did not occur in double quotes,
 and
-.Dq $@
+.Dq Li $@
 even if it did,
 for field splitting and multiple fields can result.
 .Pp

Reply via email to