summaryrefslogtreecommitdiff
path: root/Src/subst.c
diff options
context:
space:
mode:
authorBart Schaefer <barts@users.sourceforge.net>2001-02-16 08:43:46 +0000
committerBart Schaefer <barts@users.sourceforge.net>2001-02-16 08:43:46 +0000
commit04e1ef5b681eba06c29f5149fcc18412b7f0f8e4 (patch)
tree67fdaea647850f603c7ce53aedea259ae15ed35f /Src/subst.c
parent12ef192f31a8b3ebe27c2cb693396dcb05ba9bb2 (diff)
downloadzsh-04e1ef5b681eba06c29f5149fcc18412b7f0f8e4.tar.gz
zsh-04e1ef5b681eba06c29f5149fcc18412b7f0f8e4.zip
Partial sh emulation fixs for ${1+"$@"} and "${foo=$@}".
Diffstat (limited to 'Src/subst.c')
-rw-r--r--Src/subst.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/Src/subst.c b/Src/subst.c
index bb90faf0c..da848779a 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -1379,7 +1379,14 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
case '-':
if (vunset) {
val = dupstring(s);
- multsub(&val, NULL, &isarr, NULL);
+ /*
+ * This is not good enough for sh emulation! Sh would
+ * split unquoted substrings, yet not split quoted ones
+ * (except according to $@ rules); but this leaves the
+ * unquoted substrings unsplit, and other code below
+ * for spbreak splits even within the quoted substrings.
+ */
+ multsub(&val, (aspar ? NULL : &aval), &isarr, NULL);
copied = 1;
}
break;
@@ -1446,6 +1453,14 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
}
*idend = sav;
copied = 1;
+ if (isarr) {
+ if (nojoin)
+ isarr = -1;
+ if (qt && !getlen && isarr > 0) {
+ val = sepjoin(aval, sep, 1);
+ isarr = 0;
+ }
+ }
}
break;
case '?':