Trong khi các câu trả lời khác thảo luận về việc sử dụng eval
và seq
, trong bash
, bạn có thể sử dụng for
vòng lặp kiểu C truyền thống trong ngữ cảnh số học. Các biến ext0
và extN
được mở rộng bên trong ((..))
khiến cho vòng lặp chạy cho phạm vi được xác định.
for (( idx = ext0; idx <= extN; idx++ )); do
[[ -f "$foo.$idx" ]] || { printf "file %s does not exist" "$foo.$idx" >&2 ; continue }
rm "$foo.$idx"
done
Nếu bạn đang tìm kiếm một cách tối ưu và tránh nhiều rm
lệnh, bạn có thể sử dụng trình giữ chỗ tạm thời để lưu trữ kết quả tên tệp và gọi rm
trong một lần.
results=()
for (( idx = ext0; idx <= extN; idx++ )); do
[[ -f "$foo.$idx" ]] || { printf "file %s does not exist" "$foo.$idx" >&2 ; continue }
results+=( "$foo.$idx" )
done
và bây giờ gọi rm
lệnh trên mảng mở rộng
rm -- "${results[@]}"