Odpowiedzi:
Wyrażenia regularne i globbing nazw plików to dwie bardzo różne rzeczy.
Wyrażenia regularne są używane w poleceniach / funkcjach do dopasowywania wzorców w tekście. Na przykład w parametrze wzorca greplub w językach programowania.
Globbing nazw plików jest używany przez powłoki do dopasowywania nazw plików i katalogów za pomocą symboli wieloznacznych. Możliwości globowania zależą od powłoki. Na przykład Bash obsługuje symbole wieloznaczne, takie jak:
* dopasuj 0 lub więcej znaków? dopasuj 1 znak[...] dopasuj znak w określonym zestawieTe symbole wieloznaczne mogą wyglądać podobnie do wyrażeń regularnych, w rzeczywistości [...]mają to samo znaczenie w globowaniu i wyrażeniach regularnych. Ale *i ?oznaczają różne rzeczy w globowaniu i wyrażeniu regularnym.
W komentarzu napisałeś:
ale w jaki sposób interpreter różnicuje *, czy jest to joker, czy wyrażenie regularne? na przykład
grep a*b a*.txt:?
Łatwo. Raczej.
Po pierwsze, powłoka próbuje interpretować symbole wieloznaczne, dopasowując je do nazw plików. Jeśli istnieją pliki zaczynające się od „a” i kończące się na „b”, powłoka zastąpi a*bpasującymi nazwami plików. To samo dotyczy a*.txt. Jeśli nie ma pasujących nazw plików, powłoka przekaże argumenty greptak, jak były, dosłownie.
Jednak pierwszym parametrem greppowinien być wzorzec. W 99,999% praktycznych przypadków użycia nie chcesz, aby pierwszy parametr był interpretowany przez powłokę. Najprawdopodobniej chodziło o to:
grep "a*b" a*.txt
Dzięki cytowaniu a*bpowłoka nie interpretuje go za pomocą globowania, a zamiast tego przekazuje go bezpośrednio do grep. Z kolei grepzinterpretuje to jako wyrażenie regularne (zgodnie z projektem).
Podsumowując, powłoka interpretuje wiersz poleceń zgodnie z własnym językiem globowania, który używa symboli wieloznacznych. Polecenia, programy interpretują swoje parametry w sposób, w jaki zostały zaprojektowane przez ich autorów.
Jeśli nazwa pliku jest ciągiem, możesz użyć wyrażenia regularnego również w nazwach plików. Na przykład: jeśli chcesz znaleźć nazwy plików pasujące do wyrażenia regularnego, możesz spróbować:
find ./ -regex '.*[abc][xyz].*'
Polecenie szuka plików o nazwach a, b lub c, po których następuje x, y lub z. To tylko przykład. Możliwości są nieograniczone.
find ./ -name 'a*', użyj * jako symbolu wieloznacznego. Podczas pisania find ./ -regex 'a*'używasz * w wyrażeniu regularnym. Ważną różnicą jest przełącznik -namelub -regex.