Re: weird ksh eval behavior

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ralf Wildenhues <Ralf.Wildenhues@xxxxxx> writes:

> is this behavior considered "common knowledge" or should it be
> mentioned in the Autoconf shell portability section?

The latter, I think.  I installed this:

2005-12-01  Paul Eggert  <eggert@xxxxxxxxxxx>

	* doc/autoconf.texi (Shellology): Document eval $? problem
	with ash.
	(Limitations of Builtins): Likewise.

--- autoconf.texi	10 Nov 2005 18:57:58 -0000	1.933
+++ autoconf.texi	1 Dec 2005 21:02:40 -0000	1.934
@@ -9783,13 +9783,16 @@ To be compatible with Ash 0.2:
 
 @itemize @minus
 @item
-don't use @samp{$?} after expanding empty or unset variables:
+don't use @samp{$?} after expanding empty or unset variables,
+or at the start of an @command{eval}:
 
 @example
 foo=
 false
 $foo
-echo "Don't use it: $?"
+echo "Do not use it: $?"
+false
+eval 'echo "Do not use it: $?"'
 @end example
 
 @item
@@ -11120,6 +11123,25 @@ $foo
 EOF
 @end example
 
+
+@item @command{eval}
+@c -----------------
+@prindex @command{eval}
+In some shell implementations (e.g., @command{ash}, OpenBSD 3.8
+@command{sh}, @command{pdksh} v5.2.14 99/07/13.2, and @command{zsh}
+4.2.5), the arguments of @samp{eval} are evaluated in a context where
+@samp{$?} is 0, so they exhibit behavior like this:
+
+@example
+$ false; eval 'echo $?'
+0
+@end example
+
+The correct behavior here is to assign a nonzero value to @samp{foo},
+but portable scripts should not rely on this.
+
+You should not rely on @code{LINENO} within @command{eval}.
+@xref{Special Shell Variables}.
 
 @item @command{exit}
 @c -----------------


_______________________________________________
Autoconf mailing list
Autoconf@xxxxxxx
http://lists.gnu.org/mailman/listinfo/autoconf

[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux