[2-57]
เป็นชุดตัวอักษรประกอบด้วย2
, 3
, 4
, 5
และ7
ใน zsh และทุกสัญลักษณ์แทนอื่น ๆ และไวยากรณ์ regexp ออกมี รูปแบบ glob ของคุณ*[2-57]
ตรงกับชื่อไฟล์ทุกตัวที่มีอักขระตัวสุดท้ายเป็นหนึ่งในห้าหลัก
ผมคิดว่าคุณกำลัง misremembering ไวยากรณ์ของรอบคัดเลือก[m,n]
glob ตัวระบุ Glob จะอยู่ในวงเล็บเสมอที่ส่วนท้ายของรูปแบบและตัวคั่นช่วงคือเครื่องหมายจุลภาค รูปแบบ*([2,57])
ขยายไปยังการแข่งขัน 2, 3, …, 57th ลำดับการขยายเริ่มต้นคือพจนานุกรม (ด้วยเวทมนตร์พิเศษบางอย่างเพื่อเรียงลำดับหมายเลขตามลำดับตัวเลขหากnumeric_glob_sort
ตั้งค่าตัวเลือก) คุณสามารถควบคุมมันด้วยตัวระบุคุณสมบัติo
หรือO
glob (เช่น*(om[2,57])
จับคู่ไฟล์ล่าสุด 57 ไฟล์ยกเว้นไฟล์ล่าสุดหนึ่งไฟล์)
for x in /foo/bar/*([2,57]); do print $x; done
ไม่ใช่สิ่งที่คุณขอ แต่เกี่ยวข้องและอาจเป็นประโยชน์กับผู้อ่านในอนาคต: หากคุณต้องการแจกแจงไฟล์ 2 ถึง 57 ว่ามีอยู่หรือไม่คุณสามารถใช้นิพจน์วงเล็บปีกกาได้ คุณลักษณะนี้มีอยู่ใน bash และ ksh
echo hello{2..57}
และถ้าคุณต้องการจับคู่ไฟล์ที่มีชื่อมีตัวเลขระหว่าง 2 ถึง 57 คุณสามารถใช้รูปแบบ<2-57>
ได้ นี่คือเฉพาะสำหรับ zsh
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
โปรดทราบว่ารูปแบบเช่น*<2-57>
นั้นมีแนวโน้มที่จะไม่ทำตามที่คุณคาดไว้เพราะ*
สามารถจับคู่ตัวเลขได้เช่นกัน ยกตัวอย่างเช่นfile58
ตรง*<2-57>
กับfile5
การจับคู่*
และส่วนหนึ่งของ8
การจับคู่<2-57>
ส่วน รูปแบบ*[^0-9]<2-57>
หลีกเลี่ยงปัญหานี้