Kabuk komutunda. ?? * ne anlama geliyor?


Yanıtlar:


32

Globlar normal ifadeler değildir. Genel olarak, kabuk, komut satırı üzerine yazdığınız herhangi bir şeyi glob olarak önermediğiniz şeyleri yorumlamaya çalışır. Düzenli ifadeleri desteklemek için mermiler gerekmez (gerçekte meraklıların çoğu daha modern olanların yaptığı gibi, örneğin yapıdaki =~regex eşleşme operatörü bash [[).

Bu .??*bir küre. Bir değişmez noktayla başlayan ve .ardından iki (zorunlu olarak aynı değil) karakterin ??izlediği, ardından [^/]*0 veya daha fazla karakterin normal ifade eşdeğeri olan herhangi bir dosya adıyla eşleşir /.

Shell pathname genişlemesinin tam ayrıntıları için ("globbing" için tam ad), POSIX teknik özelliklerine bakın .


10
Ek nokta: bu, özel girişler dışındaki bir dizindeki tüm nokta dosyalarıyla eşleşen .ve ..normalde bir şey yapmak istemediğiniz bir sözcük yazma denemesidir . Çok doğru değil; ' .X' adında bir şey almaz, burada X noktadan başka bir karakterdir. Bunun eşleşen tek bir topak yazmak mümkün olduğunu sanmıyorum her hariç dotfile .ve ..ama ikisi ile yapabilirsiniz: tar zcvf dotfiles.tar.gz .[!.] .??*mesela.
zwol,

@Zack: Açıklama için teşekkürler. Bununla ilgili bir yorum yaptım, ancak sonra sildim. ls .?ile aynı döndürdü; ls ..bu, kalıbın eşleşen klasörde başka girdi olmadığı anlamına geliyordu .?. Dışındaki .[^.]tüm .?dosyalar için yapardım ...
SabreWolfy

2
@SabreWolfy POSIX spec'i dikkatlice okuyorsanız, bu globs ve regex arasındaki önemli bir farktır: parantez ifadelerinde, [^abc]regex sözdiziminde [!abc]glob sözdizimi ile aynı demektir (yani globs için ^değiştirilir !). [^abc]Bir dünyadaki stil sözdizimini kullanmak çok taşınabilir değildir çünkü POSIX ne anlama geldiğini belirtmez, bu nedenle bazı kabukları regex benzeri bir anlambilim kullanarak yorumlarken diğerleri ^sadece bir hazır karakter gibi davranır .
jw013

1
@ jw013: Ayrıntılar için teşekkürler. O glob'u hatırlamalıyım! =
Regexp

1
Az önce ortaya çıktı, bu durumla eşleşen dosyaların olmadığı ortak durumda komut satırında .[!.]değişmez olarak bırakılabilir tar. Bazı mermiler bu davranışı kontrol etmenize izin verir, örneğin bash ile, shopt -s nullglobeğer bir şeyle eşleşmezse komut satırından kaybolur, ancak bu evrensel bir özellik değildir.
zwol

8

.??*Joker ( değil , normal bir ifade, öyle görünüyor olsa da) bir süre (İle başlayan dosya çevirir .iki tek karakterler (izledi), ??daha sonra diğer karakterlerden herhangi numarası (sıfır veya daha fazla)) ve ( *).

Belki de Dosya Adlarındaki Joker Karakterler sayfasındaki bu sayfa faydalı olabilir.


-1

Diğer cevaplara eklemek için, ?tek bir karakter bir dosya ismine ??çevrilecektir ve sadece iki karakterden oluşan dosya isimleri ile eşleşecektir.

[root@mercy testdir_2]# ls
ion  it  r
[root@mercy  testdir_2]# ls ?
r
[root@mercy  testdir_2]# ls ??
it
[root@mercy 1 testdir_2]# ls ???
ion
[root@mercy  testdir_2]#

Downvoter, lütfen yorum yapabilir misiniz? Yanlış yaparsam düzeltilmekten mutlu olurum.
Sree

Cevabınız soruyu tam olarak cevaplamadı.
SabreWolfy
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.