Trong zsh, nếu bạn muốn sử dụng các phạm vi trong tên tệp, zle cung cấp <1-n>
trên bất kỳ tên thật nào mà nó có thể mở rộng. Đó là để nói:
$ touch a0b a1b a5b a7b
$ print a<0-100>b
Và sau đó nhấn <Tab>
ngay sau khi trận chung kết b
sẽ để lại cho bạn với print a0b a1b a5b a7b
mở rộng trên đường dây.
Đối với tất cả ý nghĩa khác và mục đích - có lẽ đầy đủ yêu cầu về phạm vi, phi tập tin và sử dụng kịch bản - Tôi muốn thể hiện điều này bằng cách sử dụng vòng lặp zsh thành ngữ khá ngắn gọn như sau:
for n ({1..50}); do print $n; done
sẽ cho phép bạn xử lý toàn bộ dãy thứ tự của các số từ 1 đến 50 :) sau đó bạn có thể thực hiện tất cả các loại nội dung hữu ích, chẳng hạn như tập hợp tệp chưa tồn tại:
arr=($(for n ({1..50}); do print /my/path/file$n.txt; done)) && print $arr[33]
Nguồn
2014-08-09 22:54:50
Vì vậy, chúng tôi có hai dấu cách: một là không ký tự đại diện và một là không gian ký tự đại diện. Nếu có một ký tự đại diện, nó buộc tôi chỉ sử dụng các ký tự đại diện. Trong cùng một cách, bạn chỉ có thể sử dụng ký tự không phải ký tự đại diện. - - Cảm ơn bạn vì câu trả lời! –
@Masi: Không hoàn toàn. Nếu tôi có một thư mục với 1-hello.gif, 2-world.gif, ..., 20-foobar.gif, '{1..20} - *. Gif' sẽ hoạt động hoàn hảo để phù hợp với chúng, trong khi' [1-20] - *. Gif' sẽ chỉ khớp với hai chữ cái đầu tiên. Điều này sẽ gây ra lỗi tương tự như trong câu hỏi của bạn nếu bất kỳ tệp tuần tự đánh số nào bị thiếu. – ephemient
@ephemient: Bạn có nghĩa là [1-20] Tệp không hoạt động nếu bạn không có, ví dụ, 7File? - Nếu vậy, lợi ích của việc sử dụng [1-20] thay vì {1..20} là gì không gây ra vấn đề cho bạn? –