[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: weird ksh eval behavior
From: |
Paul Eggert |
Subject: |
Re: weird ksh eval behavior |
Date: |
Thu, 01 Dec 2005 13:04:02 -0800 |
User-agent: |
Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux) |
Ralf Wildenhues <address@hidden> 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 <address@hidden>
* 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
+
address@hidden @command{eval}
address@hidden -----------------
address@hidden @command{eval}
+In some shell implementations (e.g., @command{ash}, OpenBSD 3.8
address@hidden, @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
address@hidden is 0, so they exhibit behavior like this:
+
address@hidden
+$ false; eval 'echo $?'
+0
address@hidden 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}.
address@hidden Shell Variables}.
@item @command{exit}
@c -----------------
- Re: weird ksh eval behavior,
Paul Eggert <=