diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/options.c | 1 | ||||
-rw-r--r-- | Src/subst.c | 13 | ||||
-rw-r--r-- | Src/zsh.h | 1 |
3 files changed, 12 insertions, 3 deletions
diff --git a/Src/options.c b/Src/options.c index 139926428..2c63f194a 100644 --- a/Src/options.c +++ b/Src/options.c @@ -145,6 +145,7 @@ static struct optname optns[] = { {NULL, "kshautoload", OPT_EMULATE|OPT_BOURNE, KSHAUTOLOAD}, {NULL, "kshglob", OPT_EMULATE|OPT_KSH, KSHGLOB}, {NULL, "kshoptionprint", OPT_EMULATE|OPT_KSH, KSHOPTIONPRINT}, +{NULL, "kshtypeset", OPT_EMULATE|OPT_KSH, KSHTYPESET}, {NULL, "listambiguous", OPT_ALL, LISTAMBIGUOUS}, {NULL, "listbeep", OPT_ALL, LISTBEEP}, {NULL, "listpacked", 0, LISTPACKED}, diff --git a/Src/subst.c b/Src/subst.c index 25eda1cee..b5480d75e 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -50,6 +50,7 @@ mod_export void prefork(LinkList list, int flags) { LinkNode node; + int asssub = (flags & PF_TYPESET) && isset(KSHTYPESET); queue_signals(); for (node = firstnode(list); node; incnode(node)) { @@ -70,7 +71,7 @@ prefork(LinkList list, int flags) if (isset(SHFILEEXPANSION)) filesub((char **)getaddrdata(node), flags & (PF_TYPESET|PF_ASSIGN)); - if (!(node = stringsubst(list, node, flags & PF_SINGLE))) { + if (!(node = stringsubst(list, node, flags & PF_SINGLE, asssub))) { unqueue_signals(); return; } @@ -97,7 +98,7 @@ prefork(LinkList list, int flags) /**/ static LinkNode -stringsubst(LinkList list, LinkNode node, int ssub) +stringsubst(LinkList list, LinkNode node, int ssub, int asssub) { int qt; char *str3 = (char *)getdata(node); @@ -211,6 +212,12 @@ stringsubst(LinkList list, LinkNode node, int ssub) str3 = str2; setdata(node, str3); continue; + } else if (asssub && ((c == '=') || c == Equals) && str != str3) { + /* + * We are in a normal argument which looks like an assignment + * and is to be treated like one, with no word splitting. + */ + ssub = 1; } str++; } @@ -1885,7 +1892,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) *--fstr = Marker; init_list1(tl, fstr); - if (!eval && !stringsubst(&tl, firstnode(&tl), ssub)) + if (!eval && !stringsubst(&tl, firstnode(&tl), ssub, 0)) return NULL; *str = aptr; tn = firstnode(&tl); diff --git a/Src/zsh.h b/Src/zsh.h index c510b9759..5ab5661d1 100644 --- a/Src/zsh.h +++ b/Src/zsh.h @@ -1384,6 +1384,7 @@ enum { KSHAUTOLOAD, KSHGLOB, KSHOPTIONPRINT, + KSHTYPESET, LISTAMBIGUOUS, LISTBEEP, LISTPACKED, |