Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: 'case' zeroes "$?"
On Sun, 9 Oct 2016 23:01:35 +0200
Martijn Dekker <martijn@xxxxxxxx> wrote:
> Unlike on other shells, 'case' on zsh zeroes "$?" before executing a
> command within 'case', making it more inconvenient to test exit status.
>
> Example:
>
> (exit 37) || case $? in 37) echo "$?";; esac
This looks straightforward. The first $? in the case pattern is expanded
as a command line argument, before the case is executed, so missed this.
diff --git a/Src/loop.c b/Src/loop.c
index 3b9d021..94b61b7 100644
--- a/Src/loop.c
+++ b/Src/loop.c
@@ -592,7 +592,6 @@ execcase(Estate state, int do_exec)
word = ecgetstr(state, EC_DUP, NULL);
singsub(&word);
untokenize(word);
- lastval = 0;
cmdpush(CS_CASE);
while (state->pc < end) {
diff --git a/Test/A01grammar.ztst b/Test/A01grammar.ztst
index 0b1085c..0e77f3e 100644
--- a/Test/A01grammar.ztst
+++ b/Test/A01grammar.ztst
@@ -757,6 +757,14 @@
>}
>Stuff here
+ (exit 37)
+ case $? in
+ (37) echo $?
+ ;;
+ esac
+0:case retains exit status for execution of cases
+>37
+
x=1
x=2 | echo $x
echo $x
Messages sorted by:
Reverse Date,
Date,
Thread,
Author