diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2008-09-01 20:18:46 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2008-09-01 20:18:46 +0000 |
commit | 1f81bdcb47d42fc72340503eca46eb0a8b64c4ef (patch) | |
tree | 6407de32edf43bd93c648590c7abfe4ad2fa1324 /Src/exec.c | |
parent | 2c9138bc21145c9680d4d10eea6f5e15e73f479c (diff) | |
download | zsh-1f81bdcb47d42fc72340503eca46eb0a8b64c4ef.tar.gz zsh-1f81bdcb47d42fc72340503eca46eb0a8b64c4ef.tar.xz zsh-1f81bdcb47d42fc72340503eca46eb0a8b64c4ef.zip |
25587: fix a==(stuff) and associated stuff.
Diffstat (limited to 'Src/exec.c')
-rw-r--r-- | Src/exec.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/Src/exec.c b/Src/exec.c index 06f08ffb8..cf0efed19 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -2220,6 +2220,7 @@ execcmd(Estate state, int input, int output, int how, int last1) doneps4 = 0; redir = (wc_code(*state->pc) == WC_REDIR ? ecgetredirs(state) : NULL); if (wc_code(*state->pc) == WC_ASSIGN) { + cmdoutval = 0; varspc = state->pc; while (wc_code((code = *state->pc)) == WC_ASSIGN) state->pc += (WC_ASSIGN_TYPE(code) == WC_ASSIGN_SCALAR ? @@ -2236,6 +2237,12 @@ execcmd(Estate state, int input, int output, int how, int last1) * they don't modify their argument strings. */ args = (type == WC_SIMPLE ? ecgetlist(state, WC_SIMPLE_ARGC(code), EC_DUP, &htok) : NULL); + /* + * If assignment but no command get the status from variable + * assignment. + */ + if (!args && varspc) + lastval = errflag ? errflag : cmdoutval; for (i = 0; i < 10; i++) { save[i] = -2; |