Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: ${^var} and word splitting
- X-seq: zsh-users 19428
- From: Stephane Chazelas <stephane.chazelas@xxxxxxxxx>
- To: Peter Stephenson <p.stephenson@xxxxxxxxxxx>
- Subject: Re: ${^var} and word splitting
- Date: Mon, 24 Nov 2014 21:18:31 +0000
- Cc: Zsh hackers list <zsh-users@xxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=FmBU8nqjOaAiky1OT6F88IGi//9JAAGd6cmm/SKjxSA=; b=Nhs2DTqWcSdkJxlaHQSGQyoQAGXoD/6TvfKF7PqOjUOtK9Loq0Y90rL8a7JA+0tMUK LjFhQbIhjjBIYJhnjLoi9/M68AJyabpO2Wbi2ijar1B4UHzs22Z+Bk4tA6Oml6nnuizF NbJTkmXE9KYT30nzkwdd+684STzv+KwgmpsT/qaLv1PnMKgiWtKlUiFztC0Lan5axGuc OvrhB00MCQroVQbKquDV9g3u1joJGEBybv9/JTsT3QlrWO8moo21mvXBYcQyE70RsZ5E 2oWB/U0/DcYHLuSogHd2lsVMc74pyfhLDDeEBauvf7AteTEd9lmY4//7ifVv+0vShuV6 kSNg==
- In-reply-to: <20141124155524.0739b3ec__26419.4987401881$1416845250$gmane$org@pwslap01u.europe.root.pri>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mail-followup-to: Peter Stephenson <p.stephenson@xxxxxxxxxxx>, Zsh hackers list <zsh-users@xxxxxxx>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <20141124095637.GA5716@chaz.gmail.com> <20141124111201.161d8cf2__23261.8202259347$1416827641$gmane$org@pwslap01u.europe.root.pri> <20141124152628.GA5749@chaz.gmail.com> <20141124155524.0739b3ec__26419.4987401881$1416845250$gmane$org@pwslap01u.europe.root.pri>
2014-11-24 15:55:24 +0000, Peter Stephenson:
[...]
> Consequently it's easy to change the behaviour in the second case...
> This doesn't cause any test failures. Unless anyone has any ideas why
> we do this, maybe we should simplify it like this? If anyone does have
> ideas, we should write a test for that case.
[...]
I'd say no. People expect:
IFS=:
PATH=/bin::/usr/bin
setopt shwordsplit
set -- $PATH
to split $PATH into /bin, "" and /usr/bin. That's how all the
shells (except the Bourne shell) behave (and POSIX requires) and
is the whole point of having _IFS white space_ in the first
place.
(BTW, POSIX also requires :/bin::/usr/bin: to be split into "",
"/bin", "" and "/usr/bin" (not another "") as IFS is the
internal field _delimiter_ there, not _separator_. I tend to
prefer the zsh way (also yash's and older versions of pdksh)
though.)
What I don't like much is IFS white spaces (or x's with (s:x:))
to be collapsed *but not removed from head and tail*.
The whole point of having /IFS white spaces/ was to split
strings the /natural/ way (like words in a text, like awk's
fields or like the Bourne shell did for any character of $IFS,
not just the whitespace ones). That means considering sequences
of blanks as one *and* leading and trailing blanks not to create
fields. A string like " : foo : bar : : baz " would be split
into "", foo, bar, "" and baz.
I don't see the point in doing one and not the other. IOW in:
~$ a=' a b ' zsh -c 'print -l ${(s, ,)a}'
a
b
~$ a=' a b ' zsh -c 'print -l "${(s, ,)a}"'
a
b
~$ a=' a b ' zsh -c 'print -l "${(s, ,@)a}"'
a
b
~$
I'd rather 2 above behave either like 1 or 2. I'm fine with 1
and 3 behave like they do now.
It may be too late to change the behaviour now, though I'd find
it hard to imagine people relying on "$=var" to make empty
arguments at the beginning and end but not in the middle.
--
Stephane
Messages sorted by:
Reverse Date,
Date,
Thread,
Author