summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/subst.c7
-rw-r--r--Test/D04parameter.ztst10
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