tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: shell (/bin/sh) pattern matching bugs
On Sun, Jun 24, 2018 at 09:55:25PM +0700, Robert Elz wrote:
> Date: Sun, 24 Jun 2018 15:52:21 +0200
> From: tlaronde%polynum.com@localhost
> Message-ID: <20180624135221.GB929%polynum.com@localhost>
>
> | It's a mess...
>
> Yes...
>
> | Wouldn't it be simple for POSIX to let the case...esac
> | as is and introduce a ecase...esac[e] (à la grep, egrep) with something
> | making more sense for corner cases?
>
> It might be rational for someone to do that, but it won't be posix
> which simply writes down what the standard is (what users can
> depend upon working) - they don't (at least most of the time)
> start inventing new stuff.
>
> In general, none of this really matters all that much - almost certainly
> not enough for some shell to implement something new, and then for
> it to be copied enough other places for it to be considered standard -
> it is all really just corner cases that the standard has to (attempt to)
> specify properly so as not to mess up the cases that people actually
> use. That's why, despite those 14 tests failing (assuming they are
> testing what should happen) no real scripts actually fail.
>
> And wrt the ps in your previous message ...
>
> | PS: I don't know if you have already modified the sh(1) man page
>
> You can check at
> https://man-k.org/
> which allows you to view man pages of a whole host of systems, and
> versions.
>
> What we have now about this is ...
>
> The syntax of the case command is
>
> case word in
> [(] pattern ) [ list ] ;&
> [(] pattern ) [ list ] ;;
> ...
> esac
>
> The pattern can actually be one or more patterns (see Shell Patterns
> described later), separated by "|" characters.
>
> There's no explicit mention in the text of the optional '(' in the patterns
> (which is in posix too) - it is a pure noise character (its presence or absense
> changes nothing) - I think it was invented in ksh (the real one), and is there
> simply to allow editors that indicate matching () [] {} (etc) to not get confused
> by an excess number of ')'s in the file. I use it sometimes, and omit
> it other times, depending entirely on my mood at the time - and to a
> degree, how long the particular case expression is likely to remain
> around - if it is likely to be a stable script, I am nore likely to include
> that '(' than I do in truly "one off" scripts.
>
> kre
>
Thanks for the explanations! I do like reading your messages and
contributions since I have more than once learned that I was making
assumptions about sh(1) that were simply wrong (and writing a fair
amount of scripts, I do stumble occasionally on corner cases or
differing implementations)...
Best regards,
--
Thierry Laronde <tlaronde +AT+ polynum +dot+ com>
http://www.kergis.com/
http://www.sbfa.fr/
Key fingerprint = 0FF7 E906 FBAF FE95 FD89 250D 52B1 AE95 6006 F40C
Home |
Main Index |
Thread Index |
Old Index