It's an arithmetic expression. --- Src/loop.c | 2 +- Test/A05execution.ztst | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Src/loop.c b/Src/loop.c index f13c8c4a9..9fb45d076 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -497,7 +497,6 @@ execrepeat(Estate state, UNUSED(int do_exec)) end = state->pc + WC_REPEAT_SKIP(code); - lastval = 0; tmp = ecgetstr(state, EC_DUPTOK, &htok); if (htok) { singsub(&tmp); @@ -506,6 +505,7 @@ execrepeat(Estate state, UNUSED(int do_exec)) count = mathevali(tmp); if (errflag) return 1; + lastval = 0; pushheap(); cmdpush(CS_REPEAT); loops++; diff --git a/Test/A05execution.ztst b/Test/A05execution.ztst index 20a594b68..e07bd9cd9 100644 --- a/Test/A05execution.ztst +++ b/Test/A05execution.ztst @@ -401,3 +401,10 @@ F:anonymous function, and a descriptor leak when backgrounding a pipeline (( exit 130 ) | { sleep 1; echo hello }) 0:exit code 130 isn't mistaken for a signal (unit test for workers/46060) >hello + + (exit 3); repeat '?' echo y +0:'repeat' loop can use lastval in the count +>y +>y +>y +