Ja, es ist [[:digit:]]~ [0-9]~ \d(wobei ~ ungefähr bedeutet).
In den meisten Programmiersprachen ( \dsofern unterstützt) ≡ [[:digit:]](identisch).
Das \dist weniger verbreitet als [[:digit:]](nicht in POSIX, aber es ist in GNU grep -P).
In UNICODE gibt es viele Ziffern , zum Beispiel:
123456789 # Hindu-Arabic arabische Ziffern
٠١٢٣٤٥٦٧٨٩ # ARABIC-INDIC
۰۱۲۳۴۵۶۷۸۹ # EXTENDED ARABIC-INDIC/PERSIAN
߀߁߂߃߄߅߆߇߈߉ # NKO DIGIT
०१२३४५६७८९ # DEVANAGARI
All dies kann in [[:digit:]]oder enthalten sein \d.
Stattdessen stehen [0-9]in der Regel nur die ASCII-Ziffern 0123456789.
Es gibt viele Sprachen: Perl, Java, Python, C. In denen [[:digit:]](und \d) nach einer erweiterten Bedeutung verlangt. Dieser Perl-Code stimmt beispielsweise mit allen Ziffern von oben überein:
$ a='0123456789 ٠١٢٣٤٥٦٧٨٩ ۰۱۲۳۴۵۶۷۸۹ ߀߁߂߃߄߅߆߇߈߉ ०१२३४५६७८९'
$ echo "$a" | perl -C -pe 's/[^\d]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
Dies entspricht der Auswahl aller Zeichen mit den Unicode-Eigenschaften von Numericund digits:
$ echo "$a" | perl -C -pe 's/[^\p{Nd}]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
Welches grep reproduzieren könnte (die spezifische Version von pcre hat möglicherweise eine andere interne Liste numerischer Codepunkte als Perl):
$ echo "$a" | grep -oP '\p{Nd}+'
0123456789
٠١٢٣٤٥٦٧٨٩
۰۱۲۳۴۵۶۷۸۹
߀߁߂߃߄߅߆߇߈߉
०१२३४५६७८९
Ändern Sie es auf [0-9], um Folgendes anzuzeigen:
$ echo "$a" | grep -o '[0-9]\+'
0123456789
POSIX
Für das spezifische POSIX BRE oder ERE:
Das \dwird nicht unterstützt (nicht in POSIX, sondern in GNU grep -P).
[[:digit:]]wird von POSIX benötigt, um der Ziffernklasse zu entsprechen, die wiederum von ISO C benötigt wird, um die Zeichen 0 bis 9 und nichts anderes zu sein. Also nur in C locale alle [0-9], [0123456789], \dund [[:digit:]]bedeutet genau das gleiche. Das [0123456789]hat keine möglichen Fehlinterpretationen, [[:digit:]]ist in mehr Dienstprogrammen verfügbar und gemeinhin nur gemeint [0123456789]. Das \dwird von wenigen Dienstprogrammen unterstützt.
Was [0-9]ist die Bedeutung des Bereichs Ausdrücke nur von POSIX in der C - Sprache definiert; In anderen Ländern kann es anders sein (Codepoint-Reihenfolge oder Sortierreihenfolge oder etwas anderes).
Muscheln
Einige Implementierungen verstehen einen Bereich möglicherweise als etwas anderes als eine reine ASCII-Reihenfolge (z. B. ksh93):
$ LC_ALL=en_US.utf8 ksh -c 'a="'"$a"'";echo "${a//[0-9]}"'
۹ ߀߁߂߃߄߅߆߇߈߉ ९
Und das ist eine sichere Quelle von Fehlern, die darauf warten, passiert zu werden.