diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/subst.c | 7 | ||||
-rw-r--r-- | Test/D04parameter.ztst | 10 |
3 files changed, 17 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog index c3953ec7d..a4a141eb1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2016-08-12 Barton E. Schaefer <schaefer@zsh.org> + + * 39028: Src/subst.c, Test/D04parameter.ztst: more join/split + cases fixed and tested. + 2016-08-10 Barton E. Schaefer <schaefer@zsh.org> * 39019 (cf. PWS 39013): Src/subst.c, Test/D04parameter.ztst: diff --git a/Src/subst.c b/Src/subst.c index ae3e4c40c..99e1650d0 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -3461,11 +3461,12 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags, val = sepjoin(aval, sep, 1); isarr = 0; ms_flags = 0; - } else if (force_split && nojoin == 2) { + } else if (force_split && (spsep || nojoin == 2)) { /* Hack to simulate splitting individual elements: - * first join on what we later use to split + * forced joining as previously determined, or + * join on what we later use to forcibly split */ - val = sepjoin(aval, spsep, 1); + val = sepjoin(aval, (nojoin == 1 ? sep : spsep), 1); isarr = 0; } } diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst index 35630c5ca..460a841c3 100644 --- a/Test/D04parameter.ztst +++ b/Test/D04parameter.ztst @@ -1970,8 +1970,14 @@ set -- one:two bucklemy:shoe IFS= setopt shwordsplit - print -l ${@} + print -l ${@} ${(s.:.)*} ${(s.:.j.-.)*} ) -0:Joining of $@ does not happen when IFS is empty +0:Joining of $@ does not happen when IFS is empty, but splitting $* does >one:two >bucklemy:shoe +>one +>twobucklemy +>shoe +>one +>two-bucklemy +>shoe |