Jak nazywa się
*.*
symbol i jakie jest jego znaczenie?
*.*
pod starymi systemami Windows / DOSZnaczenie tutaj jest bardziej związane z Windows / DOS niż z Unix / Linux. W starych systemach Windows / DOS był to wzór „wieloznaczny”. Wzory wieloznaczne zostały użyte do dopasowania nazw plików w podobny sposób, jak globusy uniksowe. Symbol *.*
wieloznaczny był powszechnie używany do dopasowania dowolnego pliku.
Podobnie jak w globusie uniksowym, *
dopasuje dowolną sekwencję znaków w nazwie pliku, ponieważ jako taka *
będzie pasować do dowolnego pliku. Jednak powodem, dla którego *.*
pasuje również do dowolnej nazwy pliku, są różnice w sposobie działania tych symboli wieloznacznych. Zgodnie z tym artykułem :
Znaki inne niż kropka występujące po gwiazdce nie mają żadnego efektu, ponieważ gwiazdka przesuwa kursor do pozycji 12, w którym to punkcie nic nie zmienia stanu parsowania, z wyjątkiem kropki, która usuwa trzy ostatnie pozycje i przesuwa kursor.
To zachowanie (nieco dziwne z perspektywy systemu Unix) oznacza, że kropka występująca po a *
nie jest w rzeczywistości zgodna z kropką, ale jest po prostu hackingiem, pozwalającym na dodanie większej liczby znaków do wzorca. Oznacza to, że dodanie kolejnego *
spowoduje dopasowanie dowolnego elementu na tych ostatnich trzech pozycjach.
Ma to trochę więcej sensu, gdy weźmie się pod uwagę, że składnia była używana w systemie DOS i starych systemach Windows przed Windows 95, który wymagał 8.3 nazw plików . Te nazwy plików mogą mieć tylko jedną kropkę i maksymalnie trzy znaki następujące po kropce. Większość, jeśli nie wszystkie pliki w systemie miałyby trzy znakowe rozszerzenie (chociaż technicznie krótsze lub żadne rozszerzenie nie było dozwolone), więc wydaje mi się, że warto *.*
było dopasować dowolny plik (przynajmniej z wypaczonej logiki Windowsey ).
*.*
w powłokach uniksowychW powłokach uniksowych, jak zauważyli inni, oznacza to „rozwinięcie nazwy ścieżki” lub „glob”. *
Nie ma dziwne skoki do zachowania końcowego, a tym samym nie prowadzi do następujących znaków jest ignorowane. *.*
wzorzec pasuje do każdej nazwy pliku zawierającej kropkę (z wyjątkiem początku). To na pewno nie będzie pasować do żadnego pliku, ponieważ w systemie Unix / Linux jest wiele plików, które nie mają rozszerzenia (lub zawierają kropkę, ponieważ jest to również dozwolone).
Powodem *.*
niezgodności kropki na początku nazw plików w Uniksie jest to, że umieszczenie kropki na początku polega na tym, że pliki są „ukryte”, a ukryte pliki są domyślnie wykluczane z globusów. Aby dopasować je w powłoce POSIX, kropka musi być wyraźnie umieszczona na początku wzorca. W bash
tej dotglob
opcji można ustawić powłoki lub GLOBIGNORE
zmienna może być ustawiona odpowiednio, ale to inna sprawa!
*7.*
, otrzymuję wszystkie pliki, których ostatnim znakiem przed rozszerzeniem jest7
, i za pomocą*sa*
, otrzymuję wszystkie pliki, które zawierają podciąg wsa
dowolnym miejscu w nazwie pliku i tak dalej. (W związku z tym artykuł zatytułowany jest zacytowanie Jak zrobił symbole wieloznaczne pracować w MS-DOS ? (Podkreślenie dodane przez siebie).)Jest
glob
w bash, poniżej cytowałem z podręcznika bash:W takim przypadku
*.*
dopasuj wszystkie pliki zawierające kropkę.
w nazwie.Możesz zobaczyć więcej szczegółów tutaj .
źródło
Gwiazdka
*
jestglob
w języku powłoki. Cytowanie z języka poleceń powłoki :Jednak nie pasuje do nazw plików rozpoczynających się od,
.
chyba żedotglob
ustawiona jest opcja powłoki .Kiedy używasz
*.*
, pasuje do wszystkiego, co:.
.
Możesz także skorzystać z Rozszerzenia nazw plików w instrukcji.
źródło
Wiele osób pochodzących z systemu Windows uważa, że
*.*
dotyczy wszystkich plików. Tak jest w systemie Windows. W systemie UNIX wszystkie pliki zawierają co najmniej 1 kropkę w nazwie.*
sam w sobie działa dobrze w systemie Windows (sięgając wstecz do wczesnego DOS); jednak stare podręczniki zostały opublikowane*.*
i wydaje się, że trudno jest je złamać.źródło
*
to symbol wieloznaczny używany przez powłokę do przeprowadzania interpretacji nazw plików , znany również jako „globbing”.*
rozwija się do czegokolwiek, w tym do niczego (np.*.*
pasujefile.
, itp.). Innym typowym symbolem wieloznacznym jest?
, który pasuje do dowolnego pojedynczego znaku.Nie należy mylić funkcji tych symboli wieloznacznych z użyciem tych samych znaków w wyrażeniach regularnych (takich jak używane z grep).
źródło
To jest gwiazda-kropka-gwiazda - przynajmniej w świecie DOS (a później oczywiście Windows). W DOS kropka
.
ma specjalne magiczne znaczenie, ponieważ nazwy plików są ośmioznakową bazą (później rozszerzoną, ale zostańmy starą szkołą) i trzyznakowym rozszerzeniem (które określało typ pliku). W Uniksie typ pliku jest zwykle definiowany przez pierwsze dwa bajty pliku (lub innej magii), a rozszerzenie ma charakter informacyjny, ale nie ma większego znaczenia. Z wyjątkiem sytuacji, gdy wszystko się rozmyło.Tak więc w Uniksie nie ma specjalnego znaczenia. Gwiazdka jest znakiem „globowania” w powłokach uniksowych i jest symbolem wieloznacznym dla dowolnej liczby znaków (w tym zera).
?
jest kolejną popularną postacią globbing, pasującą dokładnie do dowolnej postaci.*.*
pasuje do wszystkich nazw plików, które zawierają co najmniej jeden.
. Nie ma specjalnej nazwy ani żadnego znaczenia, podobnie jak*a*
lub*_*
. I*.?
pasowałby do wszystkich plików z kropką i dokładnie jednym znakiem po tej kropce. Istnieją również bardziej skomplikowane rozszerzone wzorce globowania - zobacz stronę podręcznika twojej powłoki.„Słownik New Hackera” (rozszerzenie starego „pliku żargonu” MIT) zauważa, że „gwiazda” jest najczęstszą nazwą tego
*
symbolu (po której następujesplat
), i myślę, że nadal jest to prawdą w praktyce i.
jest zdecydowanie powszechne ” kropka ”, więc chociaż nie ma on żadnego wewnętrznego znaczenia jako zlepionego symbolu, sekwencja jest nadal rozsądnie nazywana gwiazdą-kropką-gwiazdą w Uniksie. (Jest to po prostu mniej przydatne).źródło
Tutaj są tak naprawdę 2 symbole, gwiazdka
*
i kropka.
. Powłoki zwykle interpretują gwiazdkę tylko jako każdą postać, ale w wyrażeniu regularnym oznaczałoby to chciwy glob. W takim przypadku pasuje do wszystkiego, co nie kończy się lub zaczyna kropką, ale zawiera co najmniej jeden:źródło
onlydotatend.
sprawa na pewno pasuje?touch 'onlydotatend.' && echo *.*
nie zwracabash
idash
. Jakiej powłoki używasz?zsh
konfiguracji waniliowej i tam też działa. Nie rozumiem, jakonlydotatend.
nie można dopasować, czy istnieje opcja konfiguracji, która to robi?