Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [bug] sh: tilde expansion after field splitting

On Oct 5, 12:20am, Martijn Dekker wrote:
} POSIX says tilde expansion should be done before parameter expansion [...]
} zsh did this correctly up to version 5.0.8; as of 5.1, it appears to do
} tilde expansion *after* field splitting, and only from the second field on.

This is a change in the effects of SH_FILE_EXPANSION when an array is
synthesized by word splitting.

Traced this to here:

diff --git a/Src/subst.c b/Src/subst.c
index 81d34d2..021d234 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -3834,8 +3834,14 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags)
                y = dupstring(nulstring);
            insertlinknode(l, n, (void *) y), incnode(n);
-       if (eval)
-           n = on;
+       /* This used to omit restoring of *str and instead test
+        *   if (eval)
+        *       n = on;
+        * but that causes strange behavior of history modifiers when
+        * applied across all values of an array.  What is magic about
+        * eval here that *str seemed not to need restoring?
+        */
+       *str = getdata(n = on);
     } else {
         * Scalar value.  Handle last minute transformations

Apparently the answer to the question in that comment has something to
do with shfileexpansion.  Anyone have additional clues?

Messages sorted by: Reverse Date, Date, Thread, Author