]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
Describe a Solaris /bin/sh bug w.r.t. for loops.
authorStefano Lattarini <stefano.lattarini@gmail.com>
Fri, 2 Jul 2010 16:14:52 +0000 (18:14 +0200)
committerEric Blake <eblake@redhat.com>
Fri, 2 Jul 2010 16:36:15 +0000 (10:36 -0600)
* doc/autoconf.texi (Limitations of Shell Builtins) <for>:
Document a bug of the 'for' builtin in Solaris /bin/sh, w.r.t.
tokens seeming variable assignment in the list of arguments.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
doc/autoconf.texi

index c742adbf873e8e5e0e597adac6d4cc4a8ef1b21e..11de524d6c67ce8e5742973a1c86c341fcf7e5cd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2010-07-02  Stefano Lattarini  <stefano.lattarini@gmail.com>
+           Eric Blake  <eblake@redhat.com>
+
+       Describe a Solaris /bin/sh bug w.r.t. for loops.
+       * doc/autoconf.texi (Limitations of Shell Builtins) <for>:
+       Document a bug of the 'for' builtin in Solaris /bin/sh, w.r.t.
+       tokens seeming variable assignment in the list of arguments.
+       Report and final patch by Stefano Lattarini, useful suggestions
+       by Eric Blake.
+
 2010-06-23  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        Improve VPATH handling in config.status for non-Automake projects.
index 34ae872b5c56ded3943dd3743b23f482ad5089cd..561fae8b1850c07bb416a9e0b869ecf77c95d62e 100644 (file)
@@ -16703,6 +16703,44 @@ But keep in mind that Zsh, even in Bourne shell emulation mode, performs
 word splitting on @samp{$@{1+"$@@"@}}; see @ref{Shell Substitutions},
 item @samp{$@@}, for more.
 
+In Solaris @command{/bin/sh}, when the list of arguments of a
+@command{for} loop starts with @emph{unquoted} tokens looking like
+variable assignments, the loop is not executed on that tokens:
+
+@example
+$ @kbd{/bin/sh -c 'for v in a=b; do echo "$v"; done'}
+$ @kbd{/bin/sh -c 'for v in a=b d=c; do echo "$v"; done'}
+$ @kbd{/bin/sh -c 'for v in a=b x; do echo "$v"; done'}
+x
+@end example
+
+@noindent
+Quoting the "assignment-like" tokens, or preceding them with "normal"
+tokens, solves the problem:
+
+@example
+$ @kbd{/bin/sh -c 'for v in "a=b"; do echo "$v"; done'}
+a=b
+$ @kbd{/bin/sh -c 'for v in x a=b; do echo "$v"; done'}
+x
+a=b
+$ @kbd{/bin/sh -c 'for v in x a=b d=c; do echo "$v"; done'}
+x
+a=b
+c=d
+@end example
+
+@noindent
+Luckily enough, the bug is not triggered if the "assignment-like"
+tokens are the results of a variable expansion (even unquoted):
+
+@example
+$ @kbd{/bin/sh -c 'x="a=b"; for v in $x; do echo "$v"; done'}
+a=b
+@end example
+
+@noindent
+So, at least, the bug should be easy to grep for and to avoid.
 
 @anchor{if}
 @item @command{if}