zsh-users
 help / color / mirror / code / Atom feed
* nesting issue
@ 2024-05-04 19:36 Ray Andrews
  2024-05-05  3:20 ` Bart Schaefer
  0 siblings, 1 reply; 18+ messages in thread
From: Ray Andrews @ 2024-05-04 19:36 UTC (permalink / raw)
  To: Zsh Users

[-- Attachment #1: Type: text/plain, Size: 1124 bytes --]

Getting more comfortable with nesting things:

#1:
local in=($1,*(N))
#2:
local sorted=$(print -l "${(n)in[@]}")
#3:
sorted=( "${(f)sorted}" )

     ... works fine, now I do an  exact verbatim nesting of line two 
into line three:

local sorted=( "${(f)$(print -l "${(n)in[@]}") }" )

     "bad substitution".  Ok, that could be because we can't nest quotes so:

local sorted=( "${(f)$(print -l "${(n)in[@]}") }" )
local sorted=( "${(f)$(print -l \"${(n)in[@]}\") }" )
local sorted=( "${(f)$(print -l ${(n)in[@]}) }" )
local sorted=( ${(f)$(print -l ${(n)in[@]}) } )

     .... none of those work.  Is this something were a literal 
substitution of one block of characters can't work?  It hardly matters 
in practice, I prefer the three steps above, it's easier to digest, but 
purely as a theoretical question, can I nest line two and three, or even 
all three lines?  I'd like to understand why the parser doesn't like my 
efforts.  I can see that the 'no nested quotes' rule could make some 
literal substitutions logically impossible. But maybe there is a way.  
If so, seeing how will be instructive.



[-- Attachment #2: Type: text/html, Size: 1600 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-04 19:36 nesting issue Ray Andrews
@ 2024-05-05  3:20 ` Bart Schaefer
  2024-05-05  5:39   ` Lawrence Velázquez
                     ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Bart Schaefer @ 2024-05-05  3:20 UTC (permalink / raw)
  To: Ray Andrews; +Cc: Zsh Users

On Sat, May 4, 2024 at 12:36 PM Ray Andrews <rayandrews@eastlink.ca> wrote:
>
> local sorted=( "${(f)$(print -l "${(n)in[@]}") }" )
> local sorted=( "${(f)$(print -l \"${(n)in[@]}\") }" )
> local sorted=( "${(f)$(print -l ${(n)in[@]}) }" )
> local sorted=( ${(f)$(print -l ${(n)in[@]}) } )
>
>     .... none of those work.

They give "bad substitution" because you can't have a space before the
closing "}" / after the closing ")" in the parameter expansion.

local sorted=( "${(f)$(print -l "${(n)in[@]}")}" )

I'm not going into whether that produces the result that you intend.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05  3:20 ` Bart Schaefer
@ 2024-05-05  5:39   ` Lawrence Velázquez
  2024-05-05  5:40   ` Roman Perepelitsa
  2024-05-05 13:13   ` Ray Andrews
  2 siblings, 0 replies; 18+ messages in thread
From: Lawrence Velázquez @ 2024-05-05  5:39 UTC (permalink / raw)
  To: zsh-users

On Sat, May 4, 2024, at 11:20 PM, Bart Schaefer wrote:
> On Sat, May 4, 2024 at 12:36 PM Ray Andrews <rayandrews@eastlink.ca> wrote:
>>
>> local sorted=( "${(f)$(print -l "${(n)in[@]}") }" )
>> local sorted=( "${(f)$(print -l \"${(n)in[@]}\") }" )
>> local sorted=( "${(f)$(print -l ${(n)in[@]}) }" )
>> local sorted=( ${(f)$(print -l ${(n)in[@]}) } )
>>
>>     .... none of those work.
>
> They give "bad substitution" because you can't have a space before the
> closing "}" / after the closing ")" in the parameter expansion.
>
> local sorted=( "${(f)$(print -l "${(n)in[@]}")}" )
>
> I'm not going into whether that produces the result that you intend.

He should probably throw out the "print -l" and splitting fluff.

	local sorted=($1,*(Nn))

-- 
vq


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05  3:20 ` Bart Schaefer
  2024-05-05  5:39   ` Lawrence Velázquez
@ 2024-05-05  5:40   ` Roman Perepelitsa
  2024-05-05 13:52     ` Ray Andrews
  2024-05-05 13:13   ` Ray Andrews
  2 siblings, 1 reply; 18+ messages in thread
From: Roman Perepelitsa @ 2024-05-05  5:40 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: Ray Andrews, Zsh Users

On Sun, May 5, 2024 at 5:21 AM Bart Schaefer <schaefer@brasslantern.com> wrote:
>
> local sorted=( "${(f)$(print -l "${(n)in[@]}")}" )
>
> I'm not going into whether that produces the result that you intend.

My guess is that it almost certainly does not produce the result Ray
intended. This might though:

    local sorted=( $1,*(nN) )

The difference can be observed in the following cases:

- Nothing matches $1,*.
- $1 starts with a dash.
- At least one element of $1,* contains a newline.
- At least one element of $1,* contains a C style escape sequence.

I think it unlikely that in any of these cases the results produced by
the variant with the print are desired.


Roman.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05  3:20 ` Bart Schaefer
  2024-05-05  5:39   ` Lawrence Velázquez
  2024-05-05  5:40   ` Roman Perepelitsa
@ 2024-05-05 13:13   ` Ray Andrews
  2024-05-05 19:44     ` Lawrence Velázquez
  2 siblings, 1 reply; 18+ messages in thread
From: Ray Andrews @ 2024-05-05 13:13 UTC (permalink / raw)
  To: zsh-users

[-- Attachment #1: Type: text/plain, Size: 1139 bytes --]



On 2024-05-04 20:20, Bart Schaefer wrote:
> They give "bad substitution" because you can't have a space before the
> closing "}" / after the closing ")" in the parameter expansion.
>
> local sorted=( "${(f)$(print -l "${(n)in[@]}")}" )
>
Nuts, I wouldn't have even considered that.

Even tho it is accepted here?:

     sorted=( "${(f)sorted}" )

I've tended to space things out for legibility, ok, good to know that 
sometimes the parser doesn't like it.  It really is nit picking but 
'that' space seems to be 'outboard' of the actual text substitution, IOW 
it seems as if the swapping of 'sorted' for '$(print -l "${(n)in[@]}")'
is accepted verbatim an *then* the issue with the space comes up after 
the fact.  Not that it's worth worrying about.  I consider the parser to 
be a miracle worker as it is.

One thing tho, since nested quotes end up un-quoting the inner quotation 
(or is this an exception?), I'm thinking that:

  local sorted=( "${(f)$(print -l ${(n)in[@]})}" )

... one set of quotes -- should be fine.  And it seems fine.  Or is this 
one of those things where spaces in filenames is going to gotcha me?


[-- Attachment #2: Type: text/html, Size: 1910 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05  5:40   ` Roman Perepelitsa
@ 2024-05-05 13:52     ` Ray Andrews
  2024-05-05 20:14       ` Lawrence Velázquez
  0 siblings, 1 reply; 18+ messages in thread
From: Ray Andrews @ 2024-05-05 13:52 UTC (permalink / raw)
  To: zsh-users

[-- Attachment #1: Type: text/plain, Size: 1278 bytes --]



On 2024-05-04 22:40, Roman Perepelitsa wrote:
> local sorted=( $1,*(nN) )

Beautiful.  I get a 'version sort' in one go which is just what I want.  
Subsequent to my code snip I run the thing through ' | sort -V ' to get 
the version sort, but  little 'n' is smart enough to handle that in one 
line.  Dunno, it always seemed to me that 'numeric sort' is intuitively 
what the sort command calls 'version sort'.

This is what I dare say everybody wants:

8 /aWorking/Zsh/Source/Wk/Boneyard 1 % local in=(aaa,*(nN)); print -l $in
aaa,1
aaa,2
aaa,2,howdy
aaa,3a,pard
aaa,3,pard
aaa,4,2a howdy
aaa,5c,pard
aaa,5,pard
aaa,6
aaa,6a,howdy
aaa,7,aaa,7
aaa,8
aaa,9
aaa,9a
aaa,10
aaa,11
aaa,11,pard
aaa,12,12a
aaa,12,some_somme

(
One quibble, I see (cut down):

aaa,3a,pard
aaa,3,pard
aaa,6
aaa,6a,howdy

... I'd expect

aaa,3,pard
aaa,3a,pard

... however ' sort -V' does exactly the same as 'n' so I'm not whining.
)

... and this is not:

8 /aWorking/Zsh/Source/Wk/Boneyard 1 % local in=(aaa,*(nN)); print -l 
$in | sort -n
aaa,1
aaa,10
aaa,11
aaa,11,pard
aaa,12,12a
aaa,12,some_somme
aaa,2
aaa,2,howdy
aaa,3a,pard
aaa,3,pard
aaa,4,2a howdy
aaa,5c,pard
aaa,5,pard
aaa,6
aaa,6a,howdy
aaa,7,aaa,7
aaa,8
aaa,9
aaa,9a

(sorry about the garbage filenames, they're stress testers.)


[-- Attachment #2: Type: text/html, Size: 2237 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05 13:13   ` Ray Andrews
@ 2024-05-05 19:44     ` Lawrence Velázquez
  2024-05-05 20:14       ` Ray Andrews
  0 siblings, 1 reply; 18+ messages in thread
From: Lawrence Velázquez @ 2024-05-05 19:44 UTC (permalink / raw)
  To: zsh-users

On Sun, May 5, 2024, at 9:13 AM, Ray Andrews wrote:
> On 2024-05-04 20:20, Bart Schaefer wrote:
>> They give "bad substitution" because you can't have a space before the
>> closing "}" / after the closing ")" in the parameter expansion.
>> 
>> local sorted=( "${(f)$(print -l "${(n)in[@]}")}" )
>> 
> Nuts, I wouldn't have even considered that.   
>
> Even tho it is accepted here?:
>
>     sorted=( "${(f)sorted}" )

You're not comparing the right spaces.  The problem Bart pointed
out is more akin to

        sorted=( "${(f)sorted }" )


> One thing tho, since nested quotes end up un-quoting the inner 
> quotation (or is this an exception?)

Command substitution introduces a new quoting context.  Things like

        "$(cmd "arg with spaces")"

work fine.


> I'm thinking that:
>
>  local sorted=( "${(f)$(print -l ${(n)in[@]})}" )
>
> ... one set of quotes -- should be fine.  And it seems fine.

Unquoted ${(n)in[@]} drops empty elements and is equivalent to
unquoted ${(n)in}.  Whether that's acceptable is dependent on
application requirements, as always.


-- 
vq


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05 13:52     ` Ray Andrews
@ 2024-05-05 20:14       ` Lawrence Velázquez
  2024-05-05 22:18         ` Ray Andrews
  0 siblings, 1 reply; 18+ messages in thread
From: Lawrence Velázquez @ 2024-05-05 20:14 UTC (permalink / raw)
  To: zsh-users

On Sun, May 5, 2024, at 9:52 AM, Ray Andrews wrote:
> On 2024-05-04 22:40, Roman Perepelitsa wrote:
>> local sorted=( $1,*(nN) ) 
> Beautiful.  I get a 'version sort' in one go which is just what I want. 
>  Subsequent to my code snip I run the thing through ' | sort -V ' to 
> get the version sort, but  little 'n' is smart enough to handle that in 
> one line.  Dunno, it always seemed to me that 'numeric sort' is 
> intuitively what the sort command calls 'version sort'.

Those are not the same.

	% : >foo{-2,10,1,+3}
	% print -l -- foo*(n)
	foo+3
	foo-2
	foo1
	foo10
	% printf %s\\n foo* | gsort -V
	foo1
	foo10
	foo+3
	foo-2


> This is what I dare say everybody wants:

Nonsense.  There is no universally desired sort.  It depends entirely
on what the application needs.


> One quibble, I see (cut down):
>
> aaa,3a,pard
> aaa,3,pard

I don't see this behavior.

	% locale
	LANG="en_US.UTF-8"
	LC_COLLATE="en_US.UTF-8"
	LC_CTYPE="en_US.UTF-8"
	LC_MESSAGES="en_US.UTF-8"
	LC_MONETARY="en_US.UTF-8"
	LC_NUMERIC="en_US.UTF-8"
	LC_TIME="en_US.UTF-8"
	LC_ALL=
	% : >aaa,3{,a},pard
	% in=(aaa,*(n)) 
	% print -l $in
	aaa,3,pard
	aaa,3a,pard


-- 
vq


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05 19:44     ` Lawrence Velázquez
@ 2024-05-05 20:14       ` Ray Andrews
  2024-05-05 20:45         ` Lawrence Velázquez
  0 siblings, 1 reply; 18+ messages in thread
From: Ray Andrews @ 2024-05-05 20:14 UTC (permalink / raw)
  To: zsh-users

[-- Attachment #1: Type: text/plain, Size: 338 bytes --]



On 2024-05-05 12:44, Lawrence Velázquez wrote:
> Command substitution introduces a new quoting context. Things like
>          "$(cmd "arg with spaces")"
>
> work fine.
That's good to know and grammatically  satisfying.  Almost 'necessary' 
because the work of quotation in a command substitution is independent 
of what comes next.

[-- Attachment #2: Type: text/html, Size: 783 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05 20:14       ` Ray Andrews
@ 2024-05-05 20:45         ` Lawrence Velázquez
  2024-05-05 22:22           ` Ray Andrews
  0 siblings, 1 reply; 18+ messages in thread
From: Lawrence Velázquez @ 2024-05-05 20:45 UTC (permalink / raw)
  To: zsh-users

On Sun, May 5, 2024, at 4:14 PM, Ray Andrews wrote:
> That's good to know and grammatically  satisfying.  Almost 'necessary' 
> because the work of quotation in a command substitution is independent 
> of what comes next.

Useful and sensible, but not "necessary" by any means.  One of the
reasons the legacy `...` form is discouraged is that in some shells
it requires nested double quotes to be backslash-quoted.

	% ksh -c 'typeset -p .sh.version'
	.sh.version='Version AJM 93u+ 2012-08-01'
	% ksh -c 'echo "`echo "a   b   c"`"'
	ksh: : cannot execute [Is a directory]
	a b c
	% ksh -c 'echo "`echo \"a   b   c\"`"'
	a   b   c

You can make sense of this if you squint, but there's a reason no
one likes it.

-- 
vq


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05 20:14       ` Lawrence Velázquez
@ 2024-05-05 22:18         ` Ray Andrews
  2024-05-05 23:26           ` Lawrence Velázquez
  0 siblings, 1 reply; 18+ messages in thread
From: Ray Andrews @ 2024-05-05 22:18 UTC (permalink / raw)
  To: zsh-users

[-- Attachment #1: Type: text/plain, Size: 1446 bytes --]



On 2024-05-05 13:14, Lawrence Velázquez wrote:
> Nonsense. There is no universally desired sort. It depends entirely on 
> what the application needs.
Naturally, but I expect that when we are sorting numbers, '2' should 
come before '10' most of the time.  No not 'everybody' but ... sheesh, 
I'm just saying that I'm glad that '(n)' gives me what I'd call version 
sort.  That's all.  Can't I be satisfied?
> I don't see this behavior.
> ...
> 	aaa,3,pard
> 	aaa,3a,pard
>
8 /aWorking/Zsh/Source/Wk/Boneyard 1 % var=( aaa,3*(nN) ); print -l $var
aaa,3a,pard
aaa,3,pard

... I don't know what to say.

8 /aWorking/Zsh/Source/Wk/Boneyard 1 % var=( aaa,6*(nN) ); print -l $var
aaa,6
aaa,6,    # sixth char ',' precedes sixth char 'a'
aaa,6a
aaa,6a,
aaa,6a,howdy # sixth char 'a' precedes sixth char ','
aaa,6,howdy

It's not how I understand sorting but I don't doubt there is some method 
to it.  'sort' does the same.  'sort' has been around a long time so I 
don't doubt that what it does is very well thought out whether it makes 
sense to me or not.   Version sort is not a strict 'dictionary' sort, it 
'interprets', so the above does what it thinks best.  I would have expected:

aaa,6,
aaa,6a
aaa,6,howdy
aaa,6a,howdy

... but that's not the way it is. Not worth worrying about.

vmlinuz-6.1.0-20-amd64

... that's my Linux version, the algorithm for sorting such versions 
must be a bit arbitrary.  I'm not complaining.





[-- Attachment #2: Type: text/html, Size: 2711 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05 20:45         ` Lawrence Velázquez
@ 2024-05-05 22:22           ` Ray Andrews
  0 siblings, 0 replies; 18+ messages in thread
From: Ray Andrews @ 2024-05-05 22:22 UTC (permalink / raw)
  To: zsh-users

[-- Attachment #1: Type: text/plain, Size: 414 bytes --]



On 2024-05-05 13:45, Lawrence Velázquez wrote:
> Useful and sensible, but not "necessary" by any means.  One of the
Useful and sensible are good enough for me.

> reasons the legacy `...` form is discouraged is that in some shells
> it requires nested double quotes to be backslash-quoted.
>
> 	% ksh -c 'echo "`echo \"a   b   c\"`"'
That's sadistic.  How you guys keep the parser sane is beyond my imagining.

[-- Attachment #2: Type: text/html, Size: 1038 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05 22:18         ` Ray Andrews
@ 2024-05-05 23:26           ` Lawrence Velázquez
  2024-05-06  1:51             ` Ray Andrews
  0 siblings, 1 reply; 18+ messages in thread
From: Lawrence Velázquez @ 2024-05-05 23:26 UTC (permalink / raw)
  To: zsh-users

On Sun, May 5, 2024, at 6:18 PM, Ray Andrews wrote:
> On 2024-05-05 13:14, Lawrence Velázquez wrote:
>> I don't see this behavior.
>> ...
>> 	aaa,3,pard
>> 	aaa,3a,pard
>> 
> 8 /aWorking/Zsh/Source/Wk/Boneyard 1 % var=( aaa,3*(nN) ); print -l $var       
> aaa,3a,pard
> aaa,3,pard
>
> ... I don't know what to say.

Seems like differing locales (which I overlooked earlier).  On
Debian 12:

	% locale | grep -e LC_COLLATE -e LC_ALL
	LC_COLLATE="en_US.UTF-8"
	LC_ALL=
	% : >aaa,3{,a},pard
	% print -lr -- aaa,3*(n)
	aaa,3a,pard
	aaa,3,pard
	% () { local LC_COLLATE=C; print -lr -- aaa,3*(n) }
	aaa,3,pard
	aaa,3a,pard

My earlier result was with "en_US.UTF-8" on macOS.


> 8 /aWorking/Zsh/Source/Wk/Boneyard 1 % var=( aaa,6*(nN) ); print -l $var
> aaa,6
> aaa,6,    # sixth char ',' precedes sixth char 'a'
> aaa,6a
> aaa,6a,
> aaa,6a,howdy    # sixth char 'a' precedes sixth char ','
> aaa,6,howdy

Can't say I understand this result, but as above:

	% : >aaa,6{,a}{,\,,\,howdy}
	% print -lr -- aaa,6*(n)
	aaa,6
	aaa,6,
	aaa,6a
	aaa,6a,
	aaa,6a,howdy
	aaa,6,howdy
	% () { local LC_COLLATE=C; print -lr -- aaa,6*(n) }
	aaa,6
	aaa,6,
	aaa,6,howdy
	aaa,6a
	aaa,6a,
	aaa,6a,howdy


> I would have expected:
>
> aaa,6,    
> aaa,6a
> aaa,6,howdy
> aaa,6a,howdy

Why?


-- 
vq


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-05 23:26           ` Lawrence Velázquez
@ 2024-05-06  1:51             ` Ray Andrews
  2024-05-06  3:22               ` Bart Schaefer
  2024-05-06  3:43               ` Lawrence Velázquez
  0 siblings, 2 replies; 18+ messages in thread
From: Ray Andrews @ 2024-05-06  1:51 UTC (permalink / raw)
  To: zsh-users

[-- Attachment #1: Type: text/plain, Size: 1476 bytes --]



On 2024-05-05 16:26, Lawrence Velázquez wrote:
>> ... I don't know what to say.
> Seems like differing locales (which I overlooked earlier).  On
> Debian 12:
Man ... I dunno, maybe the world needs different sorting logic between 
Canada and the US but to me it just looks like making trouble.  Anyway 
kudos for figuring that out.

I would have expected:
>> aaa,6,
>> aaa,6a
>> aaa,6,howdy
>> aaa,6a,howdy
> Why?
Because at least the dictionary sort proceeds left to right with each 
subsequent character sorted as a sub-sort within the fixed sort arrived 
at by previous characters.  IOW as you move right, nothing ever changes 
to the left.  If 'aaa,6,' precedes 'aaa,6a' then every possible 
expansion of 'aaa,6,' will precede every possible expansion of 'aaa,6a'. 
It's the same as with numbers: every 2,xxx is greater than every 1,xxx.  
I suppose there's something in the version sort that interferes with 
that.  Mind ... (n) is not an explicit version sort, so what's the 
algorithm?  This gets interesting.  And ... Ooops, no, that's not what 
I'm expecting I'm expecting:

> aaa,6,
> aaa,6,howdy
> aaa,6a
> aaa,6a,howdy

... a few more tests ... 'sort -V' is different.  But '(n)' seems the 
same as 'sort -n':

aaa,6
aaa,6,
aaa,6a
aaa,6a,
aaa,6a,howdy
aaa,6,howdy    # I'd just like to know how this ends up last. I'd expect 
it 3d.  Both version sort and '(n)' agree that this is last. There will 
be an algorithm I'd just like to know what it is.


[-- Attachment #2: Type: text/html, Size: 2597 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-06  1:51             ` Ray Andrews
@ 2024-05-06  3:22               ` Bart Schaefer
  2024-05-06 13:01                 ` Ray Andrews
  2024-05-06  3:43               ` Lawrence Velázquez
  1 sibling, 1 reply; 18+ messages in thread
From: Bart Schaefer @ 2024-05-06  3:22 UTC (permalink / raw)
  To: Ray Andrews; +Cc: zsh-users

On Sun, May 5, 2024 at 6:51 PM Ray Andrews <rayandrews@eastlink.ca> wrote:
>
> Man ... I dunno, maybe the world needs different sorting logic between Canada and the US but to me it just looks like making trouble.

C sort is done in the order of the ASCII values of the characters.
Locale-based sorting is intended to match (hardcopy) dictionary order
for the represented language.  The latter may mean that "A" and "a"
both sort before "B" and "b" and so on, whereas ASCII sorts all
uppercase letters before all lowercase.  Handling of numbers and
punctuation relative to letters and numbers may also vary.

Sorting usually proceeds left to right by character position, which
means e.g. "22" sorts before "4" because ASCII "2" (062) is compared
to "4" (064).  When you ask for "numeric" sorting, each consecutive
series of digits is instead interpreted as an integer that occupies
one "position" -- but the strings are still compared position by
position, so when comparing "a2" to "10b" the character "a" is
compared to the integer "10" and sorts after it.  You only get actual
numeric ordering for "mixed" alphanumerics when the numbers occupy the
same relative positions.

Version sorting is yet another thing entirely, see
Functions/Misc/is-at-least for example.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-06  1:51             ` Ray Andrews
  2024-05-06  3:22               ` Bart Schaefer
@ 2024-05-06  3:43               ` Lawrence Velázquez
  2024-05-06 13:09                 ` Ray Andrews
  1 sibling, 1 reply; 18+ messages in thread
From: Lawrence Velázquez @ 2024-05-06  3:43 UTC (permalink / raw)
  To: zsh-users

On Sun, May 5, 2024, at 9:51 PM, Ray Andrews wrote:
> There will be an algorithm I'd just like to know what it is.

It's not that simple.  You're conflating the sorting method with
the locale's collation rules.  Under Debian's en_US.UTF-8 locale
even straight lexicographic sort can be surprising:

	% foo=(1, 1a,); print -lr -- ${(o)foo}
	1,
	1a,
	% foo=(1,a 1a,a); print -lr -- ${(o)foo}
	1,a
	1a,a
	% foo=(1,b 1a,b); print -lr -- ${(o)foo}
	1a,b
	1,b

I'm afraid I can't explain this; perhaps someone else can.  If it
bothers you, consider temporarily setting LC_ALL=C (or C.UTF-8)
while you sort.

-- 
vq


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-06  3:22               ` Bart Schaefer
@ 2024-05-06 13:01                 ` Ray Andrews
  0 siblings, 0 replies; 18+ messages in thread
From: Ray Andrews @ 2024-05-06 13:01 UTC (permalink / raw)
  To: zsh-users

[-- Attachment #1: Type: text/plain, Size: 598 bytes --]



On 2024-05-05 20:22, Bart Schaefer wrote:
> Version sorting is yet another thing entirely, see
> Functions/Misc/is-at-least for example.
>
A superb summary Bart.  It's why I don't get too worried  about it 
because there are so many possible interpretations.  I don't want to 
waste list time on it much.  I am curious about what zsh (or sort) is 
doing tho:

aaa,6,
aaa,6a
aaa,6a,howdy
aaa,6,howdy

I'm expecting the last line to be second because comma precedes 'a' 
irrespective of what happens in column 7.  But really, don't waste time 
on it.  In practice I'm quite happy with '(n)'.

[-- Attachment #2: Type: text/html, Size: 1151 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: nesting issue
  2024-05-06  3:43               ` Lawrence Velázquez
@ 2024-05-06 13:09                 ` Ray Andrews
  0 siblings, 0 replies; 18+ messages in thread
From: Ray Andrews @ 2024-05-06 13:09 UTC (permalink / raw)
  To: zsh-users

[-- Attachment #1: Type: text/plain, Size: 629 bytes --]



On 2024-05-05 20:43, Lawrence Velázquez wrote:
> I'm afraid I can't explain this; perhaps someone else can.  If it
> bothers you, consider temporarily setting LC_ALL=C (or C.UTF-8)
> while you sort.
>
Don't waste any time on it.  I've run into this 'locale' stuff in the 
past and as I said I think it's a can of worms.  You might think that 
all English dictionaries would use the same lexicography, but ... In 
every practical way '(n)' gives me just what I want.  Oh, but it was 
good to shake out the idea that 'numeric' or 'version' were the issue.  
As you show, even dictionary sort seems to go strange. Let it be.

[-- Attachment #2: Type: text/html, Size: 1090 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2024-05-06 13:10 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-04 19:36 nesting issue Ray Andrews
2024-05-05  3:20 ` Bart Schaefer
2024-05-05  5:39   ` Lawrence Velázquez
2024-05-05  5:40   ` Roman Perepelitsa
2024-05-05 13:52     ` Ray Andrews
2024-05-05 20:14       ` Lawrence Velázquez
2024-05-05 22:18         ` Ray Andrews
2024-05-05 23:26           ` Lawrence Velázquez
2024-05-06  1:51             ` Ray Andrews
2024-05-06  3:22               ` Bart Schaefer
2024-05-06 13:01                 ` Ray Andrews
2024-05-06  3:43               ` Lawrence Velázquez
2024-05-06 13:09                 ` Ray Andrews
2024-05-05 13:13   ` Ray Andrews
2024-05-05 19:44     ` Lawrence Velázquez
2024-05-05 20:14       ` Ray Andrews
2024-05-05 20:45         ` Lawrence Velázquez
2024-05-05 22:22           ` Ray Andrews

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).