From: Stefano Lattarini Date: Fri, 2 Jul 2010 16:14:52 +0000 (+0200) Subject: Describe a Solaris /bin/sh bug w.r.t. for loops. X-Git-Tag: v2.66~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b6a515746aeeafac36b5faddb0ed1514b0569364;p=thirdparty%2Fautoconf.git Describe a Solaris /bin/sh bug w.r.t. for loops. Fix the commit (forgot to 'git add .'). * doc/autoconf.texi (Limitations of Shell Builtins) : 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 --- diff --git a/ChangeLog b/ChangeLog index 11de524d..9f5c879d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,12 +1,10 @@ 2010-07-02 Stefano Lattarini - Eric Blake + and Eric Blake Describe a Solaris /bin/sh bug w.r.t. for loops. * doc/autoconf.texi (Limitations of Shell Builtins) : 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. + tokens seeming variable assignment in the list of arguments. 2010-06-23 Ralf Wildenhues diff --git a/doc/autoconf.texi b/doc/autoconf.texi index 561fae8b..6353f870 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -16705,43 +16705,28 @@ 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: +variable assignments, the loop is not executed on those 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'} +$ @kbd{/bin/sh -c 'for v in a=b c=d x e=f; do echo $v; done'} x +e=f @end example @noindent -Quoting the "assignment-like" tokens, or preceding them with "normal" -tokens, solves the problem: +Thankfully, quoting the assignment-like tokens, or starting the list +with other tokens (including unquoted variable expansion that results in +an assignment-like result), avoids the problem, so it is easy to work +around: @example -$ @kbd{/bin/sh -c 'for v in "a=b"; do echo "$v"; done'} +$ @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 +$ @kbd{/bin/sh -c 'x=a=b; for v in $x c=d; do echo $v; done'} 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} @c ---------------