Bash * dosyaları alfasayısal sırayla eşleştiriyor mu?


25

Bir sürü dosyayı dosya adı sırasına göre birleştirmek istiyorum.

Bunun bana alfanümerik bir düzen vereceğini varsaymak güvenli midir?

cat * 

yani aynı emri lsverir.

Yanıtlar:


26

Kısa cevap: Evet olacak.

Gönderen bash adam sayfası:

Kelime bölme işleminden sonra, -f seçeneği belirlenmemişse (bkz. Setin Set), Bash her kelimeyi '*', '?' Ve '[' karakterleri için tarar. Bu karakterlerden biri belirirse, kelime bir kalıp olarak kabul edilir ve onun yerine eşleşen dosya adlarının alfabetik olarak sıralanmış bir listesi kullanılır.


6
"Alfabetik" öğesinin yerel ayarlara bağlı olarak değiştiğine dikkat edin (özellikle $LC_COLLATE).
Grawity

4
@grawity true, ancak lsaynı sistemde olduğu gibi aynı çıktıya neden olur.
BloodPhilia

8

Kısa cevap evet, ancak aklınızdaki doğal düzene karşılık gelmeyebileceğinden, alfanümerik düzenin ne olması gerektiğini düşündüğünün farkında olmalısınız.

Örneğin, sisteminizde ve sayı dizilerinde öğrenmek için büyük ve küçük harflerin nasıl kullanıldığına dair bir test yapın.

Bir glob tarafından döndürülen dosyaların sıralanmasında karşılaştığım yaygın bir problem numaralı dosyalardır. Sık sık şöyle numaralandırılmış dosyalar verilir:

blah_1.txt
blah_2.txt
...
blah_10.txt
blah_11.txt

Ancak, kullanarak bir glob *bu sırayla onları iade olmaz, bunun gibi bir şey elde edersiniz:

blah_1.txt
blah_10.txt
blah_11.txt
...
blah_2.txt
blah_20.txt
...

Yani - Bunu tek haneli böylece dosyaları veya yeniden adlandırma dosyaları iade listesinde bazı manipülasyon yapmak ya ihtiyacı (yani sıfır olması gerekir bu sorunu önlemek için blah_01.txt, blah_02.txtvs.).

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.