เลื่อนลง ...
ชื่อไฟล์.
และ..
จะถูกละเว้นเสมอเมื่อGLOBIGNORE
ตั้งค่าและไม่ว่าง
ส่วนใหญ่แล้วจะไม่ต้องการรวม.
และ..
ตรงกับสัญลักษณ์แทนเนื่องจากไม่ได้แสดงไฟล์ในไดเรกทอรี - พวกเขากำลังแฮ็กเพื่อให้การนำทางไดเรกทอรีทำงาน ความจริงแล้วที่มาของไฟล์ดอทนั้นเป็นจุดบกพร่องในls
คำสั่งเวอร์ชันแรกๆ ผู้เขียนตั้งใจจะแยก.
และ..
ออกจากรายชื่อ แต่ไม่รวมไฟล์ทั้งหมดที่ขึ้นต้นด้วยโดย.
ไม่ตั้งใจ ดังนั้นไฟล์ dot ls
กลายเป็นที่ซ่อนอยู่จาก ls
เปลือกหอยตามเหมาะสมโดยการซ่อนไฟล์จุดเช่น อย่างไรก็ตามวิธีการทำเช่นนี้เป็นการแฮ็คอีกครั้ง: ไฟล์ที่ขึ้นต้นด้วย.
จะถูกแยกออกเฉพาะในกรณีที่จุดไม่ได้ถูกจับคู่อย่างชัดเจนในรูปแบบ ดังนั้นรูปแบบ.*
รวมและ.
..
เพื่อรักษาความเข้ากันได้กับสคริปต์ที่มีอยู่เปลือกหอยที่ทันสมัยยังคงรวม.
และ..
(ยกเว้น zsh ซึ่งในปัญหานี้เหมือนคนอื่น ๆ หลายคนมี saner แต่พฤติกรรมที่เข้ากันได้ย้อนหลัง) อย่างไรก็ตามหากคุณตั้งค่าGLOBIGNORE
คุณกำลังใช้คุณสมบัติเฉพาะของ bash ซึ่งแสดงว่าคุณไม่สนใจความเข้ากันได้แบบย้อนหลัง ดังนั้นการจับคู่รูปแบบจึงเปลี่ยนเพื่อแยก.
และ..
ออกจากการจับคู่รูปแบบทั้งหมด
การตั้งค่าจะGLOBIGNORE=.
แยกไฟล์ที่ถูกแยกออกโดยอัตโนมัติอย่างไรก็ตามเมื่อใดก็ตามที่GLOBIGNORE
มีการตั้งค่าดังนั้นจึงมีค่าเท่ากับshopt -s dotglob
ยกเว้น.
และ..
นอกจากนั้นจะถูกแยกออกจากทุกรูปแบบ
GLOBIGNORE
ไม่สนใจ.
และ..
ในรูปแบบสแลชน้อยและ GLOBIGNORE กรองเส้นทางไฟล์ไม่ใช่ชื่อไฟล์GLOBIGNORE=.; echo .*
จะไม่รวม.
หรือ..
แต่จะGLOBIGNORE=.; echo ./.*
(หรือecho /bin/.*
)! ที่จะไม่สนใจ.
และ..
จาก globs ทั้งหมดมันดูเหมือนว่าคุณต้องการและshopt -s extglob
GLOBIGNORE='?(*/)@(.|..)'