diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/subst.c | 13 | ||||
-rw-r--r-- | Test/D04parameter.ztst | 11 |
3 files changed, 22 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog index 60ca41dc9..ea66ea20e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2001-09-25 Bart Schaefer <schaefer@zsh.org> + + * 15871, 15872: Src/subst.c, Test/D04parameter.ztst: Equivalence + of `...` and $(...) in parameter substitutions, e.g. ${(e)...}. + 2001-09-25 Sven Wischnowsky <wischnow@zsh.org> * 15868, 15869: Src/text.c: job text building code couldn't handle diff --git a/Src/subst.c b/Src/subst.c index 8bd1a1ae3..4ed6e5e45 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -133,7 +133,7 @@ stringsubst(LinkList list, LinkNode node, int ssub, int asssub) str3 = (char *)getdata(node); continue; } - } else if ((qt = c == Qtick) || c == Tick) + } else if ((qt = c == Qtick) || (c == Tick ? (mult_isarr = 1) : 0)) comsub: { LinkList pl; char *s, *str2 = str; @@ -724,9 +724,12 @@ subst_parse_str(char **sp, int single, int err) int qt = 0; for (; *s; s++) - if (!qt && *s == Qstring) - *s = String; - else if (*s == Dnull) + if (!qt) { + if (*s == Qstring) + *s = String; + else if (*s == Qtick) + *s = Tick; + } else if (*s == Dnull) qt = !qt; } return 0; @@ -1492,7 +1495,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) /* This once was executed only `if (qt) ...'. But with that * patterns in a expansion resulting from a ${(e)...} aren't * tokenized even though this function thinks they are (it thinks - * they are because subst_parse_string() turns Qstring tokens + * they are because subst_parse_str() turns Qstring tokens * into String tokens and for unquoted parameter expansions the * lexer normally does tokenize patterns inside parameter * expansions). */ diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst index 01d71dbc5..37b5a1897 100644 --- a/Test/D04parameter.ztst +++ b/Test/D04parameter.ztst @@ -212,10 +212,17 @@ >split me >I'm yours - foo='$(print Howzat)' - print ${(e)foo} + foo='$(print Howzat usay)' + print -l ${(e)foo} 0:${(e)...} >Howzat +>usay + + foo='`print Howzat usay`' + print -l ${(e)foo} +0:Regress ${(e)...} with backticks (see zsh-workers/15871) +>Howzat +>usay foo='I'\''m nearly out of my mind with tedium' bar=foo |