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

Re: Inconsistencies in "-quoting and @-splitting, could someone elaborate?



On Sun, Oct 28, 2018 at 4:54 AM Sebastian Gniazdowski
<sgniazdowski@xxxxxxxxx> wrote:
>
> @ is refered to as "@  -- double-quoted splitting of scalars" in
> completion.

Well, that's incorrect, Oliver should not have put it that way.  @ has
nothing to do with splitting of scalars; it would more correctly say
"prevent double-quoted joining of arrays".  (In general you should
assume the manual is correct when it conflicts with a completion
description, because the latter are often radically abbreviated for
short lines.)

> I understand it as: for quoted expression, regenerate
> array-form by doing splitting.

No, it regenerates nothing.  It just preserves the array form that
already existed.  If there was no array form in the first place, it
has no effect.

> So one can obtain always-array behavior with @.

Also wrong, which is why the (A) flag was extended to mean "treat
single-element arrays as arrays instead of as scalars".  The
description in _brace_parameter has not yet been updated for this
(another example of why you should believe the manual rather than the
completion descriptions).

> % array=( "foo" )
> % print "${#${(@)array}}"
> 1
>
> Despite array is single element, @ splits it into array type.

Again, no.  See my previous message.  ${${array}} is special because
$array is a parameter name.  ${${(s: :)scalar}} remains scalar if
there is no space to split on.  If you want the result of (s::) to
always be an array, use (As::).



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