svn commit: r229038 - stable/8/bin/sh

Jilles Tjoelker jilles at
Fri Dec 30 22:07:16 UTC 2011

Author: jilles
Date: Fri Dec 30 22:07:15 2011
New Revision: 229038

  MFC r227122: sh(1): Improve documentation of field splitting.
  This describes the POSIX-compliant splitting algorithm that first appeared
  in 8.0.

Directory Properties:
  stable/8/bin/sh/   (props changed)

Modified: stable/8/bin/sh/sh.1
--- stable/8/bin/sh/sh.1	Fri Dec 30 22:07:04 2011	(r229037)
+++ stable/8/bin/sh/sh.1	Fri Dec 30 22:07:15 2011	(r229038)
@@ -32,7 +32,7 @@
 .\"	from: @(#)sh.1	8.6 (Berkeley) 5/4/95
 .\" $FreeBSD$
-.Dd June 24, 2011
+.Dd November 5, 2011
 .Dt SH 1
@@ -1045,6 +1045,11 @@ of alphabetics, numerics, and underscore
 The first letter of a variable name must not be numeric.
 A parameter can also be denoted by a number
 or a special character as explained below.
+Assignments are expanded differently from other words:
+tilde expansion is also performed after the equals sign and after any colon
+and usernames are also terminated by colons,
+and field splitting and pathname expansion are not performed.
 .Ss Positional Parameters
 A positional parameter is a parameter denoted by a number greater than zero.
 The shell sets these initially to the values of its command line
@@ -1154,11 +1159,15 @@ used in tilde expansion and as a default
 .It Va IFS
 Input Field Separators.
-This is normally set to
+The default value is
 .Aq space ,
 .Aq tab ,
-.Aq newline .
+.Aq newline
+in that order.
+This default also applies if
+.Va IFS
+is unset, but not if it is set to the empty string.
 See the
 .Sx White Space Splitting
 section for more details.
@@ -1291,12 +1300,12 @@ part of the name.
 If a parameter expansion occurs inside double-quotes:
 .Bl -enum
-Pathname expansion is not performed on the results of the
 Field splitting is not performed on the results of the
 expansion, with the exception of the special parameter
 .Va @ .
+Pathname expansion is not performed on the results of the
 In addition, a parameter expansion can be modified by using one of the
@@ -1495,16 +1504,51 @@ This is a bug.
 The result of the expression is substituted in decimal.
 .Ss White Space Splitting (Field Splitting)
-After parameter expansion, command substitution, and
+In certain contexts,
+after parameter expansion, command substitution, and
 arithmetic expansion the shell scans the results of
 expansions and substitutions that did not occur in double-quotes for
 field splitting and multiple fields can result.
-The shell treats each character of the
+Characters in
+.Va IFS
+that are whitespace
+.Aq space ,
+.Aq tab ,
+.Aq newline
+are treated differently from other characters in
+.Va IFS .
+Whitespace in
+.Va IFS
+at the beginning or end of a word is discarded.
+Subsequently, a field is delimited by either
+.Bl -enum
+a non-whitespace character in
+.Va IFS
+with any whitespace in
+.Va IFS
+surrounding it, or
+one or more whitespace characters in
+.Va IFS .
+If a word ends with a non-whitespace character in
+.Va IFS ,
+there is no empty field after this character.
+If no field is delimited, the word is discarded.
+In particular, if a word consists solely of an unquoted substitution
+and the result of the substitution is null,
+it is removed by field splitting even if
 .Va IFS
-variable as a delimiter and uses
-the delimiters to split the results of parameter expansion and command
-substitution into fields.
+is null.
 .Ss Pathname Expansion (File Name Generation)
 Unless the
 .Fl f

More information about the svn-src-stable-8 mailing list