Warum passt dieses Muster zu 'ab', aber nicht zu 'ba'?

8

Ich spielte mit erweitertem Globbing herum, aber es gibt welche Kuriosität mit dem inversen Matcher !(PATTERN) . Betrachten Sie das folgende Beispiel

%Vor%

Nun sieht es so aus, als ob !() mit der leeren Zeichenfolge übereinstimmt, aber warum stimmt *a*!(a) nicht mit ba überein?

Ich nahm an, dass im zweiten Beispiel ab wie folgt angepasst ist

%Vor%

was wiederum eine Übereinstimmung von ba im dritten Fall wie folgt vorschlagen würde

%Vor%

sieht aber so aus, als ob das nicht funktioniert.

Selbst wenn man die Gier berücksichtigt, macht das für mich keinen Sinn. Was vermisse ich?

bearbeiten:
Ich bin auf GNU bash, Version 4.1.7(2)-release (i386-apple-darwin10.4.0)

    
user123444555621 26.09.2012, 07:15
quelle

3 Antworten

0

Es ist ein Fehler in Bash

  

Chet Ramey schrieb
   [...] und das wird für die nächste Version behoben sein.

    
user123444555621 29.09.2012, 09:23
quelle
1

Das ist in der Tat seltsam. Ich könnte dein Verhalten reproduzieren. Die Fremdheit ist das * hinter dem a -Zeichen. Wenn ich deinen Code ausführe:

%Vor%

... es ist wie du beschrieben hast. Aber wenn ich das zweite * überspringe, stimmt es mit beiden Dateien überein

%Vor%

Das bedeutet, dass Ihre übereinstimmenden Elemente korrekt sein sollten. Die Frage ist, warum stimmt dieses zweite Sternchen nicht mit der Null-Zeichenfolge im ersten Beispiel überein. Wie die Dokumentation sagt, sollte es mit der Null-Zeichenfolge übereinstimmen, aber es scheint, als ob das nicht richtig funktioniert.

Vielleicht stimmen unsere Bash-Versionen nicht mit der Dokumentation überein?

%Vor%     
mana 26.09.2012 07:50
quelle
1

Das funktioniert: () hinzugefügt, um zu disambiguieren

%Vor%

seltsam: *a*!(a)c , entspricht abc und bac (was normales Verhalten ist)

    
Nahuel Fouilleul 26.09.2012 10:22
quelle

Tags und Links