Tạo chuỗi đối số để truyền cho một chương trình?


8

Tôi hiện đang sử dụng kết hợp dấu ngoặc nhọn và hả hê để phát nhiều tệp trong vlc cùng một lúc:

vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}*

Nhưng các con số là toàn bộ chuỗi, có cách nào đó để xác định nó đơn giản hơn một chút, có thể là một cái gì đó như

vlc K20-{06-17}*

? Có thể sử dụng seqbằng cách nào đó?

tôi có thể sử dụng

   $ echo K20-{$(seq -s, -f "%02.0f" 06 17)}*
K20-{06,07,08,09,10,11,12,13,14,15,16,17}*

nhưng điều đó dường như không mở rộng *. Có cách nào xung quanh nó không?


7
Cú pháp cho một phạm vi mở rộng cú đúp là {m..n}- vì vậyK20-{06..17}*
Steeldo

Câu trả lời:


13

Như @steel ấn ghi chú, K20-{06..17}*bao gồm nó.

Ví dụ, sử dụng echođể kiểm tra / xác nhận:

$ echo vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}*
vlc K20-06* K20-07* K20-08* K20-09* K20-10* K20-11* K20-12* K20-13* K20-14* K20-15* K20-16* K20-17*
$ echo vlc K20-{06..17}*
vlc K20-06* K20-07* K20-08* K20-09* K20-10* K20-11* K20-12* K20-13* K20-14* K20-15* K20-16* K20-17*

Các *sẽ được mở rộng cũng như nếu có file trùng với tên trong thư mục làm việc hiện tại.

Vì vậy, vlc K20-{06..17}*sẽ đạt được những gì bạn muốn.

Thông tin thêm về mở rộng bash tại Hướng dẫn tham khảo GNU Bash - Mở rộng Brace . Hoặc từ man bash, đọc:

Biểu thức tuần tự có dạng {x..y [.. tăng]}, trong đó x và y là số nguyên hoặc ký tự đơn và tăng, một số gia tùy chọn, là một số nguyên.

Vì thế:

$ echo K20-{06..10}
K20-06 K20-07 K20-08 K20-09 K20-10

$ echo K20-{06..10..2}
K20-06 K20-08 K20-10
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.