Liệu bash's * khớp các tệp theo thứ tự chữ và số?


25

Tôi muốn nối một loạt các tệp với nhau theo thứ tự tên tệp.

Có an toàn không khi cho rằng điều này sẽ cho tôi theo thứ tự chữ và số?

cat * 

tức là cùng một thứ tự lscho.

Câu trả lời:


26

Câu trả lời ngắn gọn: Có nó sẽ.

Từ trang bash man :

Sau khi tách từ, trừ khi tùy chọn -f đã được đặt (xem Bộ dựng sẵn), Bash quét từng từ cho các ký tự '*', '?' Và '['. Nếu một trong những ký tự này xuất hiện, thì từ đó được coi là một mẫu và được thay thế bằng một danh sách tên tệp được sắp xếp theo thứ tự bảng chữ cái phù hợp với mẫu.


6
Lưu ý rằng "bảng chữ cái" thay đổi tùy theo cài đặt ngôn ngữ (cụ thể $LC_COLLATE).
grawity

4
@grawity đúng, nhưng nó sẽ dẫn đến cùng một đầu ra như lstrên cùng một hệ thống.
BloodPhilia

8

Câu trả lời ngắn gọn là có, nhưng bạn cần lưu ý về những gì nó nghĩ rằng thứ tự chữ và số nên là, vì nó có thể không tương ứng với thứ tự tự nhiên bạn có trong tâm trí.

Ví dụ: chạy một số thử nghiệm về cách xử lý chữ hoa và chữ thường để tìm hiểu trên hệ thống của bạn, cũng như các chuỗi số.

Một vấn đề phổ biến tôi gặp phải khi sắp xếp danh sách các tệp được trả về bởi một quả địa cầu là các tệp được đánh số. Tôi thường được cung cấp các tập tin được đánh số như:

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

Tuy nhiên, một quả cầu sử dụng *sẽ không trả lại chúng theo thứ tự này, thay vào đó bạn sẽ nhận được một cái gì đó như:

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

Vì vậy, - để tránh vấn đề này, bạn sẽ hoặc là cần phải làm một số thao tác trên danh sách trả về các tập tin, hoặc các tập tin đổi tên để một con số đã dẫn zero (ví dụ blah_01.txt, blah_02.txtvv).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.