Was bedeutet „im POSIX-Gebietsschema“?

Was bedeutet „im POSIX-Gebietsschema“?

Indiese FrageEs gibt einen Kommentar, der besagt:

Und das alles, weil ich nicht verstehe, was „im POSIX-Gebietsschema“ bedeutet. (-: Sie sollten wirklich versuchen, griechische Kleinbuchstaben mit (sagen wir) sed und [[:lower:]] und einem praktischen el_GR.UTF-8-Gebietsschema-Set abzugleichen. – JdeBP

Also: Was bedeutet „im POSIX-Gebietsschema“?

Bonus: Ist dies in POSIX in anderen Gebietsschemas als C gültig?

LC_ALL=C grep '[[:lower:]]' file

Antwort1

Wenn POSIX sagt (für „upper“)

Im POSIX-Gebietsschema gilt nur:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

sind einzuschließen:

es definiert das POSIX-Gebietsschema. Es bedeutet, dass im Kontext des POSIX-Gebietsschemas die „obere“ Zeichenklasse nur aus den aufgelisteten Zeichen besteht.

POSIX definiert keine anderen Locales, aber Systeme können dies tun. grep '[[:lower:]]' fileWenn Sie sich also nur auf POSIX beschränken, können Sie sich nicht darauf verlassen, dass Sie in einem anderen Locale als POSIX etwas Sinnvolles tun. Viele Systeme definieren jedoch andere Locales und ihre Zeichenklassen. Auf einem System, das die Locales der GNU C-Bibliothek verwendet,

$ echo 'α' | LC_ALL=el_GR.UTF-8 grep '[[:lower:]]'
α

(Dies setzt voraus, dass das el_GR.UTF-8Gebietsschema verfügbar ist. Bei Debian-Derivaten können Sie dies schnell sicherstellen, indem Sie das locales-allPaket installieren.)

Antwort2

Ich habe Ihren Vorschlag (in der anderen Frage) nicht ganz verstanden. Es scheint jedoch, dass Sie den Anwendungsfall desPOSIX-Gebietsschema.

Ihr Vorschlag scheint zu sein, dass das Gebietsschema nicht sehrBenutzerfreundlich. Und dass es angepasst werden sollte, um es so zu machen. AllerdingsBenutzerDer Sinn des POSIX-Lokalverzeichnisses besteht nicht in „freundlich“, das ist die Aufgabe anderer Lokalverzeichnisse mit anderen Regeln.

Die Aufgabe des POSIX-Lokals besteht darin, vorhersehbar zu sein. Tatsächlich profitiert es auch von seiner Einfachheit. Wenn Sie einmal damit beginnen, andere Sprachen in einen Standard aufzunehmen, ist es sehr schwierig, damit aufzuhören, und das Ergebnis ist ein Standard, der viel Wartung erfordert und schwer zu implementieren ist.

Es ist mir als Entwickler unmöglich, alle Regeln für alle Sprachen zu kennen, sie in „alphabetischer“ Reihenfolge zu sortieren und auch zu wissen, welche groß- und welche kleingeschrieben sind. Die Regeln für nicht-englische Sprachen können in der Tat sehr komplex sein. Wenn Sie also die Posix-Lokalsprache so anpassen, dass sie die Regeln für alle anderen Sprachen enthält, wird ihr Verhalten in der Tat sehr unvorhersehbar.

Änderungen am POSIX-Gebietsschema könnten tatsächlich schädlich für Software sein, wenn ältere Systeme nicht mit dem Verhalten neuerer Systeme übereinstimmen. (Siehe Anekdote unten)


Anekdote

Einer der obskursten und am schwierigsten zu diagnostizierenden Fehler, die ich je gesehen habe, war in einemETL-ToolZeilen "zufällig" löschen. Nach sorgfältiger Analyse stellte sich heraus, dass die Software einwandfrei funktionierte, aber nur, wenn sie mit LC_COLLATE=C ausgeführt wurde. Dies lag daran, dass sie beim Abgleichen von Datensätzen auf die Sortierreihenfolge einer Datenbank angewiesen war, die ihrer eigenen internen Sortierreihenfolge entsprach. Den Entwicklern war einfach nie aufgefallen, dass Zahlen in einigen Gebietsschemas Text alphabetisch "0, -1, 1, -2, 2" statt "-1, -2, 1, 2" sortierten.

Ganz abgesehen von der Benutzerinteraktion zeigt dies, dass ein echtes Bedürfnis nach einem vorhersehbaren und für alle Systeme gemeinsamen Verhalten der Systeme besteht.

verwandte Informationen