Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Reading line by line
- X-seq: zsh-users 11388
- From: Stephane Chazelas <Stephane_Chazelas@xxxxxxxx>
- To: Micah Cowan <micah@xxxxxxxxxx>
- Subject: Re: Reading line by line
- Date: Wed, 11 Apr 2007 20:19:53 +0100
- Cc: zsh-users@xxxxxxxxxx
- In-reply-to: <461D2E79.6070907@xxxxxxxxxx>
- Mail-followup-to: Micah Cowan <micah@xxxxxxxxxx>, zsh-users@xxxxxxxxxx
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
- References: <242911.74922.qm@xxxxxxxxxxxxxxxxxxxxxxxxx> <461D2541.1080104@xxxxxxxxxx> <20070411183602.GD4996@xxxxxxxxxxxxxxx> <461D2E79.6070907@xxxxxxxxxx>
On Wed, Apr 11, 2007 at 11:52:41AM -0700, Micah Cowan wrote:
[...]
> $ echo 'a b' | read -r
>
> zsh will preserve all whitespace between a and b, whereas other shells
> will condense it to a single space. POSIX states that, after splitting
> the fields, if there is only one variable name left in the args, all
> remaining fields will be assigned to that variable, with "their
> intervening separation", which IMO is difficult to interpret as anything
> other than the original separation that had been encountered.
[...]
No, you must have been confused by word splitting occuring upon
unquoted variable expansions.
In
echo 'a b' | read a
echo $a
You see "a b", not because "read" compresses the spaces, but
because $a is word split into 2 arguments "a" and "b", and
echo outputs its parameters separated by *one* space.
echo 'a b' | read a
echo "$a"
outputs "a b"
That's what POSIX requires and that's how zsh behaves when
in POSIX emulation.
When not in POSIX emulation, zsh behaves (almost) the intuitive
way, that is
echo $a
does pass the content of $a as a single argument to echo which
is the content of $a. I said "almost" because it's only true if
$a is set and not empty (and of course if it's of scarlar type).
Note that word splitting is not the only thing performed by
POSIX shells upon variable expansion, there's also filename
generation. That's why one should *NEVER* leave variables
unquoted in POSIX scripts.
In zsh, to have word splitting:
$=a instead of $a ($= look like scissors).
$~a to have filename generation.
So $a in POSIX shells is like $=~a in zsh.
--
Stéphane
Messages sorted by:
Reverse Date,
Date,
Thread,
Author