2015-04-03 12 views
8

Tôi muốn lặp qua tất cả các tệp khớp với tiện ích jpg hoặc txt. Tôi sử dụng:Cách đối sánh không có gì nếu tên tệp glob không có kết quả phù hợp

for file in myDir/*.{jpg,txt} 
do 
    echo "$file" 
done 

Vấn đề: Nếu thư mục không chứa tập tin jpg ở tất cả, vòng lặp sẽ có một lần lặp với sản lượng myDir/*.jpg. Tôi thougth * sẽ được thay thế bằng một tập tin tùy ý (và nếu không có tập tin tồn tại nó không thể được mở rộng). Làm cách nào để tránh lặp lại không mong muốn?

+0

Nếu một mô hình không có trận đấu, hành vi/POSIX mặc định là để điều trị các mô hình như là một chuỗi theo nghĩa đen, chứ không phải là bỏ qua hoặc loại bỏ các mô hình. – chepner

+0

Không liên quan đến câu hỏi, nhưng lưu ý rằng niềng răng không phải là một phần của mẫu. Chúng là viết tắt 'bash' để tạo ra một tập hợp các chuỗi liên quan và mở rộng chuỗi đó thành' myDir/* .jpg myDir/*. Txt' trước khi bắt đầu mẫu khớp. – chepner

Trả lời

12

Sử dụng này để tránh sự lặp đi lặp lại không mong muốn:

shopt -s nullglob 

Từ man bash:

nullglob: Nếu được đặt, bash cho phép mô hình đó phù hợp không tạo các file (xem tên đường dẫn mở rộng ở trên) để mở rộng sang một chuỗi rỗng, thay vì bản thân họ.

Xem: help shoptshopt

Các vấn đề liên quan