ในขณะที่คำตอบอื่น ๆ พูดถึงการใช้eval
และseq
ในbash
คุณสามารถใช้การfor
วนซ้ำสไตล์ C แบบดั้งเดิมในบริบททางคณิตศาสตร์ ตัวแปรext0
และextN
ถูกขยายภายใน((..))
ทำให้ลูปทำงานในช่วงที่กำหนด
for (( idx = ext0; idx <= extN; idx++ )); do
[[ -f "$foo.$idx" ]] || { printf "file %s does not exist" "$foo.$idx" >&2 ; continue }
rm "$foo.$idx"
done
หากคุณกำลังมองหาวิธีที่ดีที่สุดและหลีกเลี่ยงrm
คำสั่งหลาย ๆคำสั่งคุณสามารถใช้ตัวยึดตำแหน่งชั่วคราวเพื่อจัดเก็บผลลัพธ์ชื่อไฟล์และการโทรแบบrm
ครั้งเดียว
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
และตอนนี้เรียกrm
คำสั่งในอาร์เรย์ที่ขยาย
rm -- "${results[@]}"