*. * Sembolü nedir?


Yanıtlar:


20

*.*Eski Windows / DOS sistemlerinin altında yorumlanması

Buradaki önem Windows / DOS ile Unix / Linux'tan daha önemlidir. Eski Windows / DOS sistemlerinde 'joker karakter' deseniydi. Dosya adlarını Unix glob'larına benzer şekilde eşleştirmek için joker karakterler kullanılmıştır. *.*Joker yaygın herhangi bir dosyayı maç için kullanıldı.

Unix glob'ında *olduğu gibi *, dosya adındaki herhangi bir karakter dizisiyle eşleşir , kendi başına da herhangi bir dosyayla eşleşir. Bununla birlikte, *.*herhangi bir dosya adıyla da eşleşmenin nedeni , bu joker karakterlerin çalışma şeklindeki farklılıklardan kaynaklanmaktadır. Bu makaleye göre :

Yıldız işaretinden sonra gelen nokta dışındaki herhangi bir karakterin hiçbir etkisi yoktur, çünkü yıldız işareti imleci 12 konumuna hareket ettirir; bu noktada nokta, son üç konumu temizleyen ve imleci hareket ettiren bir nokta dışında ayrıştırma durumunu değiştirmez.

Bu davranış (Unix perspektifinden biraz garip) *, a'yı izleyen bir noktanın aslında bir nokta ile eşleşmediği, ancak desene daha fazla karakter eklemenize izin vermek için sadece hackish bir yol olduğu anlamına gelir . Başka bir deyişle, *son üç konumdaki herhangi bir şeyle eşleşecektir.

Sözdiziminin, DOS ve eski Windows sistemlerinde, 8.3 dosya adlarını gerektiren Windows 95'ten önce kullanıldığını düşündüğünüzde, bu biraz daha mantıklıdır . Bu dosya adlarının yalnızca bir noktaya ve noktadan sonra en fazla üç karaktere sahip olmasına izin verildi. Çoğu, sistemdeki tüm dosyaların üç karakterli bir uzantısı olmasa bile (teknik olarak daha kısa veya hiç uzantıya izin verilmese de), bu yüzden bir şekilde *.*herhangi bir dosyayı eşleştirmek için kullanmak mantıklıydı (en azından çarpık bir Windowsey mantık perspektifinden) ).

Yorumlanması *.*Unix kabuklarda

Unix mermilerinde, diğerlerinin de belirttiği gibi, bu bir 'yol adı genişletmesi' veya 'glob' anlamına gelir. Bu *, son davranışına tek bir sıçrama yapmaz ve bu nedenle onu izleyen karakterlere yol açmaz. *.*kalıbı, nokta içeren dosya adlarıyla eşleşir (başlangıçta hariç). Unix / Linux sisteminde sayıda dosya gibi bu kesinlikle herhangi bir dosyayı maç olmayacak yok bir uzantısı olan (veya başka türlü bu da izin verilir beri bir nokta içerir).

Sebebi *.*başlangıcında bir nokta koyarak dosyalar 'gizli' ve gizli dosyaları varsayılan olarak Neználkovo dışında tutulur nasıl çünkü Unix üzerinde dosya adları başında bir nokta uyan değil. Bunları POSIX kabuğunda eşleştirmek için, desenin başlangıcına açıkça bir nokta konulması gerekir. Gelen kabuk seçeneği ayarlanabilir veya değişken uygun ayarlanabilir, ancak bu ayrı bir soru!bashdotglobGLOBIGNORE


1
Mevcut Windows sürümlerinin daha mantıklı davrandığı unutulmamalıdır. Özellikle, "Yıldız işaretinden sonra gelen bir nokta dışında herhangi bir karakterin hiçbir etkisi yoktur" artık doğru değildir; en azından Windows 7'de standart bir Açık Dosya iletişim kutusundaki *7.*dosyaları kalıba göre filtrelerken , uzantıdan önceki son karakteri olan tüm dosyaları a 7ve *sa*alt dosya içeren tüm dosyaları dosya adının saherhangi bir yerinde alıyorum vb. (Buna bağlı olarak, alıntı yazı başlıklı nasıl yaptığını joker çalışmak DOS'ta ? . (Vurgu başıma eklendi))
VEYA Mapper

1
@ ORMapper, başlıkları bunu yansıtacak şekilde güncelledi. Bu davranış (üstbilgi yanıltıcı olmasına rağmen) yanıt içinde olan Windows 95 öncesi.
Graeme

11

Bu globbash, aşağıda bash el kitabından alıntı var:

bash - GNU Bourne-Again Kabuğu

*

Null dizesi de dahil olmak üzere herhangi bir dizeyle eşleşir. Globstar kabuk seçeneği etkinleştirildiğinde ve *bir yol adı genişletme bağlamında *skullanıldığında, tek bir desen olarak kullanılan iki bitişik tüm dosyalarla ve sıfır veya daha fazla dizin ve alt dizinle eşleşir. Ardından a /harfi *sgelirse , iki bitişik yalnızca dizinlerle ve alt dizinlerle eşleşir.

Bu durumda, adında *.*nokta içeren dosyaları eşleştirin ..

Daha fazla ayrıntıyı burada görebilirsiniz .


8

Yıldız işareti *bir globkabuk dilidir. Kabuk Komut Dilinden Alıntı :

Yıldız işareti ( '*'), boş dize de dahil olmak üzere herhangi bir dizeyle eşleşecek bir kalıptır.

Ancak, .kabuk seçeneği dotglobayarlanmadığı sürece bir ile başlayan dosya adlarıyla eşleşmez .

Kullandığınızda *.*, aşağıdakilere karşılık gelir:

  • ile başlamıyor .
  • en az bir tane içeriyor .

Kılavuzdaki Dosya Adı Genişletme'ye de bakmak isteyebilirsiniz .


6

Windows'dan gelen birçok insan *.*tüm dosyalar için düşünüyor . Windows'da öyle. UNIX'te, adlarında en az 1 nokta içeren tüm dosyalardır. *tek başına Windows'da iyi çalışır (erken DOS'a kadar uzanan); ancak eski ders kitapları yayınlandı *.*ve kırılması zor bir alışkanlık gibi görünüyor.


4

*"globbing" olarak da bilinen dosya adı genişletmesi gerçekleştirmek için kabuk tarafından kullanılan bir joker karakterdir . *hiçbir şey dahil hiçbir şeye genişler (örneğin *.*eşleşir file.vb.). Diğer genel joker karakter, ?herhangi bir tek karakterle eşleşir.

Bu joker karakterlerin işlevini, normal ifadelerde (grep ile kullanılanlar gibi) aynı karakterlerin kullanımı ile karıştırmayın.


3

Bu yıldız noktası yıldızı - en azından DOS (ve daha sonra elbette Windows) dünyasında. DOS'ta noktanın .özel büyülü anlamı vardır, çünkü dosya adları sekiz karakterlik bir taban (daha sonra genişletilir, ancak eski okulda kalalım) ve üç karakterli bir uzantıdır (dosya türünü tanımlayan). Unix'te dosya türü genellikle dosyanın ilk iki baytı (veya başka bir sihir) tarafından tanımlanır ve uzantı bilgilendiricidir, ancak fazla bir anlamı yoktur. Bunların hepsi bulanıklaştığında hariç.

Yani, Unix'te özel bir anlam yok. Yıldız işareti, Unix kabuklarında "zonklayan" bir karakterdir ve herhangi bir sayıda karakter için (sıfır dahil) joker karakterdir. herhangi bir karakterle tam olarak? eşleşen başka bir yaygın globbing karakteridir.

*.*en az bir tane içeren dosya adlarıyla eşleşir .. Bu özel bir isme sahip veya herhangi bir daha fazla anlam vermez *a*ya *_*. Ve *.?herhangi bir dosyayı bir noktaya ve bu noktadan sonra tam olarak bir karaktere eşitler. Daha karmaşık bazı globbing desenleri de var - kabuğunuzun man sayfasına bakın.

"Yeni Hacker'ın Sözlüğü" (eski MIT "Jargon Dosyasının genişletilmesi)" yıldız "ın *sembol için en yaygın isim olduğunu (bunu izlediğini splat) ve bunun pratikte hala geçerli olduğunu ve .kesinlikle yaygın olduğunu düşünüyorum. Bu nedenle, birleşik sembol olarak içsel bir özel anlamı olmasa da, diziye hala makul bir şekilde Unix'te yıldız-nokta-yıldız denir . (Daha az kullanışlı.)


Bu garip gelebilir, ancak "yıldız nokta yıldız" dan bahsettiğiniz için teşekkür ederiz, bu sayfayı googleable yapan budur!
Score_U

3

Burada aslında 2 sembol, yıldız işareti *ve nokta var .. Kabuklar normalde yıldız işaretini herhangi bir karakter olarak yorumlar, ancak normal ifadede açgözlü bir küre anlamına gelir. Bu durumda, bir nokta ile bitmeyen veya başlamayan, ancak en az bir tane içeren herhangi bir şeyle eşleşir:

somefile.dot # match
.dot.between.words. # match
.onlydotatstart # don't match
onlydotatend. # match
.startandenddot. # don't match

1
Durumunuz onlydotatend.muhakkak bir maç?
Graeme

@Güleme hayır. touch 'onlydotatend.' && echo *.*geri gelmez
Braiam

1
Benim için yapar! Her iki günü bashve dash. Hangi kabuğu kullanıyorsun?
Graeme

@ Graeme zsh, ve haklısın bash değil.
Braiam

Bunu sadece vanilya zshkonfigürasyonunda denedim ve orada da çalışıyor. Nasıl onlydotatend.bir eşleşme olamayacağını anlamıyorum , bunu yapan bir yapılandırma seçeneği var mı?
Graeme
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.