echo [9876543210] 1 4 5 6'yı gösteriyor… neden?


19

Lütfen son dört eko ifadesi için neden 1 4 5 6 görüntülendiğini açıklayınız? Bunu bir kez kazara vurdum, ama şimdi bu davranışın neden oluştuğunu merak ediyorum.

Bu ifadeler beklendiği gibi çalışır (benim için).

$ echo [ 9876543210 ]  
[ 9876543210 ]

$ echo [237890]  
[237890]

Bu yankı ifadeleri sürekli olarak 1 4 5 6'yı gösterir. Bu sayılarla ilgili özel bir şey var mı?

$ echo [9876543210]  
1 4 5 6

$ echo [abcd9876543210ghi]  
1 4 5 6

$ echo [-123456-]  
1 4 5 6

$ echo [-7654321-]  
1 4 5 6

Teşekkürler!

  • Olası kopya ilgili ve yararlıdır, ancak kopya değildir. Olası kopya bir rmkomutun perspektifinden gelir . Bu soru, bir echokomutun algılanan "tuhaf davranışı" perspektifinden geliyor . Her ikisinin de altında yatan cevap globbing. Bir echokomutla ilgili sorunları arayan bir kişi rmsoruyu kolayca bulamaz , ancak muhtemelen buraya iner.

16
şu anki dizinde 4 dosya var, adlı kullanıcı: 1 4 5and6
Jeff Schaller

5
Lol, metasmoke.erwaysoftware.com/post/58973 adresindeki bot bu yazıyı spam olarak işaretliyor çünkü "başlıkta bir telefon numarası var" ... gerçekten mi?
Carlo Wood

2
@CarloWood, arka arkaya on basamak, ABD telefon numarasını alan koduyla eşleştirir. Normal biçimlendirme kullanılarak yazılırsa, 987-654-3210 olur.
Mark

1
Açarsanız, nullglobikinci örneğinizin ( echo [237890]) aslında diğer örneklerde glob-genişleme gördüğünüze dair bir ipucu olabilecek hiçbir şey yazdırmayacağını unutmayın.
Kyle Strand

Yanıtlar:


33

Açık braket [, kabuğa özel bir karakterdir; "parantez içindeki karakterlerden herhangi biriyle eşleş" yazan bir desen eşleştirme algoritması açar. Geçerli dizininizde 1, 4, 5 ve 6 adında 4 dosya bulunduğundan, köşeli parantez içindeki karakterler bu rakamlardan herhangi birini içerdiğinde, kabuğunuz desen eşleşmesini bu dosya adlarıyla değiştirir. Bunun yerine kullandığınızda echo [ 9876543210 ]: Eğer 3 parametrelerle yankı aradığınız [, 9876543210ve ].

Kabuğun bir desen eşleştirme isteği olarak görmesini önlemek için echo ifadenizin parametrelerini alıntılamanız gerekir.

$ echo '[9876543210]'
[9876543210]

(veya 1, 4, 5 ve 6 adlı dosyaları kaldırın - ancak bu, düzeltmeyi değil davranışı göstermek için bir çözümdür).


4
Belki de üç parametreli echo [ 987 ]çağrıların echobahsetmekten daha iyi olduğunu söyleyebilir testmiyiz?
dhag

2
gerçekten olurdu! Ben aşırı cevap verdim :(
Jeff Schaller

1
* Ayrıca ilk test sürümünüzü beğendim, çünkü başlangıçta çeşitli testlerin yankı ifadelerini denerken bununla karşılaştım.
MikeD

1
Orijinal cevap doğru değil. Şöyle yazdı: yankı [9876543210]. [(Dolayısıyla test) çağrısı yapılmaz.
knezi

Kilit nokta, köşeli parantezlerin ve köşeli parantezler arasında boşluk olup olmamasına bağlı olarak echofarklı yorumlanmasıdır bash. [123]vs [ 123 ].
jskroch
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.