ชื่ออะไรสำหรับ
*.*
สัญลักษณ์และความสำคัญของมันคืออะไร?
ชื่ออะไรสำหรับ
*.*
สัญลักษณ์และความสำคัญของมันคืออะไร?
คำตอบ:
*.*
ภายใต้ระบบ Windows / DOS แบบเก่าความสำคัญที่นี่เกี่ยวข้องกับ Windows / DOS มากกว่า Unix / Linux ในระบบปฏิบัติการ Windows / DOS เก่ามันเป็นรูปแบบ 'ไวด์การ์ด' รูปแบบสัญลักษณ์แทนถูกใช้สำหรับการจับคู่ชื่อไฟล์ในลักษณะที่คล้ายคลึงกับ Unix globs *.*
สัญลักษณ์แทนถูกนำมาใช้กันทั่วไปเพื่อให้ตรงกับไฟล์ใด ๆ
เช่นเดียวกับ Unix glob, *
จะจับคู่ลำดับของตัวละครในชื่อไฟล์, เช่นนั้น*
จะจับคู่กับไฟล์ใด ๆ อย่างไรก็ตามเหตุผลที่*.*
จะจับคู่ชื่อไฟล์ใด ๆ ก็เป็นเพราะความแตกต่างในวิธีการทำงานของสัญลักษณ์ตัวแทนเหล่านี้ ตามบทความนี้ :
อักขระใด ๆ ที่นอกเหนือจากจุดที่อยู่หลังเครื่องหมายดอกจันจะไม่มีผลกระทบใด ๆ เนื่องจากเครื่องหมายดอกจันจะเลื่อนเคอร์เซอร์ไปที่ตำแหน่ง 12 ซึ่งไม่มีสิ่งใดเปลี่ยนแปลงสถานะการแยกวิเคราะห์ยกเว้นจุดซึ่งจะล้างตำแหน่งสามตำแหน่งสุดท้ายและย้ายเคอร์เซอร์
พฤติกรรมนี้ (ค่อนข้างแปลกจากเปอร์สเปคทีฟของ Unix) หมายความว่าจุดที่ตามหลัง a *
ไม่ตรงกับจุดจริง ๆ แต่เป็นเพียงวิธีการแฮ็ก ซึ่งหมายความว่าการเพิ่มอีก*
จะตรงกับสิ่งใดในสามตำแหน่งสุดท้าย
นี้จะทำให้ความรู้สึกเล็ก ๆ น้อย ๆ เมื่อคุณพิจารณาว่าไวยากรณ์ที่ถูกนำมาใช้ใน DOS และ Windows ระบบเก่าก่อนที่ Windows 95 ซึ่งจำเป็นต้อง8.3 ชื่อไฟล์ ชื่อไฟล์เหล่านี้อนุญาตให้มีหนึ่งจุดเท่านั้นและมีความยาวไม่เกินสามตัวอักษรต่อจากจุด ส่วนใหญ่ถ้าไม่ใช่ไฟล์ทั้งหมดในระบบจะมีนามสกุลตัวอักษรสามตัว (แม้ว่าในทางเทคนิคจะอนุญาตให้มีนามสกุลสั้นลงหรือไม่มีเลยก็ได้) ดังนั้นฉันคิดว่ามันเหมาะสมที่จะใช้*.*
เพื่อจับคู่ไฟล์ใด ๆ (อย่างน้อยจากมุมมองตรรกะ Windowsey )
*.*
ใน Unix shellsใน Unix shells, อย่างที่คนอื่น ๆ ชี้, นี่แสดงถึง 'การขยายชื่อพา ธ ' หรือ 'glob' สิ่ง*
นี้ไม่มีการกระโดดที่ผิดปกติไปสู่พฤติกรรมที่สิ้นสุดและดังนั้นจึงไม่นำไปสู่ตัวละครหลังจากถูกละเว้น *.*
รูปแบบจะตรงกับชื่อไฟล์ใด ๆ ที่มีจุด (ยกเว้นที่จุดเริ่มต้น) สิ่งนี้จะไม่ตรงกับไฟล์ใด ๆ เนื่องจากมีไฟล์จำนวนมากในระบบ Unix / Linux ที่ไม่มีนามสกุล (หรือมีจุดเป็นอย่างอื่นเนื่องจากอนุญาตเช่นนี้)
สาเหตุของการ*.*
ไม่จับคู่จุดที่จุดเริ่มต้นของชื่อไฟล์บน Unix นั้นเนื่องมาจากการใส่จุดที่จุดเริ่มต้นคือการที่ไฟล์นั้น 'ซ่อน' และไฟล์ที่ซ่อนอยู่ถูกแยกออกจาก globs โดยค่าเริ่มต้น เพื่อให้ตรงกับพวกเขาในเปลือก POSIX จุดจะต้องมีการวางอย่างชัดเจนที่จุดเริ่มต้นของรูปแบบ ในตัวเลือกเปลือกสามารถตั้งค่าหรือตัวแปรที่สามารถตั้งค่าที่เหมาะสม แต่นี้เป็นคำถามอื่น!bash
dotglob
GLOBIGNORE
มันglob
อยู่ในทุบตีด้านล่างฉันได้ยกมาจากคู่มือทุบตี:
bash - GNU Bourne-Again SHell
*
จับคู่สตริงใด ๆ รวมถึงสตริง null เมื่อเปิดใช้งานตัวเลือกเชลล์ globstar และ
*
ใช้ในบริบทการขยายชื่อพา ธ การใช้สองแบบที่อยู่ติดกัน*s
เป็นรูปแบบเดียวจะจับคู่ไฟล์ทั้งหมดและไดเรกทอรีหรือไดเรกทอรีย่อยหรือไดเรกทอรีย่อย หากตามด้วย a/
, สองรายการที่อยู่ติดกัน*s
จะจับคู่เฉพาะไดเรกทอรีและไดเรกทอรีย่อย
ในกรณีนี้ให้*.*
จับคู่ไฟล์ใด ๆ ที่มีจุด.
ในชื่อ
เครื่องหมายดอกจัน*
เป็นglob
ภาษาของเชลล์ การอ้างอิงจากภาษาคำสั่งของเชลล์ :
เครื่องหมายดอกจัน (
'*'
) เป็นรูปแบบที่จะจับคู่สตริงใด ๆ รวมถึงสตริงว่าง
อย่างไรก็ตามจะไม่ตรงกับชื่อไฟล์ที่ขึ้นต้นด้วย a .
ยกเว้นว่าdotglob
ตั้งค่าตัวเลือกเชลล์ไว้
เมื่อคุณใช้*.*
มันจะจับคู่อะไรก็ได้ที่:
.
.
คุณอาจต้องการอ้างอิงการขยายชื่อไฟล์ในคู่มือ
ผู้คนจำนวนมากที่มาจาก Windows คิดว่า*.*
มีไว้สำหรับไฟล์ทั้งหมด บน Windows มันเป็น บน UNIX มันเป็นไฟล์ทั้งหมดที่มีอย่างน้อย 1 จุดในชื่อของพวกเขา *
ทำงานด้วยตัวเองได้ดีใน Windows (ย้อนกลับไปสู่ช่วงต้นของ DOS); อย่างไรก็ตามตำราเก่าที่ตีพิมพ์*.*
และดูเหมือนว่าจะเป็นนิสัยที่ยากที่จะทำลาย
*
เป็นสัญลักษณ์แทนที่เชลล์ใช้เพื่อทำการขยายชื่อไฟล์หรือที่เรียกว่า "globbing" *
ขยายไปสู่สิ่งใดรวมถึงไม่มีสิ่งใด (เช่น*.*
จะจับคู่file.
ฯลฯ ) ไวด์การ์ดทั่วไปอื่น ๆ คือ?
ซึ่งตรงกับอักขระเดี่ยวใด ๆ
อย่าสับสนฟังก์ชั่นของสัญลักษณ์ตัวแทนเหล่านี้ด้วยการใช้ตัวอักษรเดียวกันในการแสดงออกปกติ (เช่นที่ใช้กับ grep)
นั่นคือstar-dot-star - อย่างน้อยในโลก DOS (และหลังจากนั้นแน่นอน Windows) ในดอทจุด.
มีความหมายวิเศษพิเศษเนื่องจากชื่อไฟล์เป็นฐานแปดตัวอักษร (ขยายในภายหลัง แต่ขออยู่โรงเรียนเก่า) และนามสกุลสามตัวอักษร (ซึ่งกำหนดประเภทไฟล์) ใน Unix ชนิดของไฟล์มักจะถูกกำหนดโดยสองไบต์แรกของไฟล์ (หรือเวทย์มนตร์อื่น ๆ ) และส่วนขยายนั้นเป็นข้อมูล แต่ไม่มีความหมายมากนัก ยกเว้นเมื่อสิ่งนี้ได้รับความเบลอทั้งหมด
ดังนั้นใน Unix จึงไม่มีความหมายพิเศษ เครื่องหมายดอกจันเป็นอักขระ "globbing" ใน Unix shells และเป็น wildcard สำหรับจำนวนอักขระใด ๆ (รวมถึงศูนย์) ?
เป็นอีกตัวอักษรกลมทั่วไปที่ตรงกับหนึ่งในตัวละครใด ๆ
*.*
ตรงกับชื่อไฟล์ใด ๆ .
ที่มีอย่างน้อยหนึ่ง แต่ไม่ได้มีชื่อพิเศษหรือความหมายใด ๆ มากกว่าหรือ*a*
*_*
และ*.?
จะจับคู่ไฟล์ใด ๆ กับจุดหนึ่งตัวตรงหลังจากจุดนั้น นอกจากนี้ยังมีรูปแบบการขยายแบบวงกลมที่ซับซ้อนมากขึ้น - ดูหน้าเปลือกของคุณ
"พจนานุกรมแฮ็กเกอร์ใหม่" (การขยายตัวของไฟล์ "ศัพท์แสง" MIT) บันทึกว่า "ดาว" เป็นชื่อที่พบบ่อยที่สุดสำหรับ*
สัญลักษณ์ (ตามด้วยsplat
) และฉันคิดว่ามันยังคงเป็นจริงในทางปฏิบัติและ.
เป็นเรื่องปกติ " จุด "ดังนั้นแม้ว่ามันจะไม่มีความหมายพิเศษใด ๆ ภายในเป็นสัญลักษณ์ของกลุ่ม บริษัท ลำดับยังคงเรียกว่าstar-dot-starบนยูนิกซ์ (มันมีประโยชน์น้อยกว่า)
ที่นี่มีจริง 2 สัญลักษณ์เครื่องหมายดอกจันและจุด*
.
โดยปกติแล้วเชลล์จะตีความเฉพาะเครื่องหมายดอกจันเป็นตัวอักษรใด ๆ แต่ใน regex มันจะหมายถึงรูปวงกลมโลภ ในกรณีนี้มันจะจับคู่สิ่งที่ไม่สิ้นสุดหรือเริ่มต้นด้วยจุด แต่มีอย่างน้อยหนึ่งรายการ:
somefile.dot # match
.dot.between.words. # match
.onlydotatstart # don't match
onlydotatend. # match
.startandenddot. # don't match
onlydotatend.
กรณีของคุณคือการจับคู่แน่นอน?
touch 'onlydotatend.' && echo *.*
ไม่ได้คืน
bash
dash
คุณใช้เปลือกอะไร
zsh
กำหนดค่าวานิลลาและมันก็ใช้ได้เหมือนกัน ฉันไม่เข้าใจวิธีonlydotatend.
การจับคู่ไม่ได้มีตัวเลือกการกำหนดค่าที่ทำเช่นนี้หรือไม่
*7.*
ให้รับไฟล์ทั้งหมดที่มีอักขระตัวสุดท้ายก่อนที่นามสกุลจะเป็น a7
และด้วย*sa*
ฉันจะได้รับไฟล์ทั้งหมดที่มีสตริงย่อยsa
ที่ใดก็ได้ในชื่อไฟล์นั้นเป็นต้น (ดังนั้นบทความที่คุณกล่าวถึงเป็นเรื่องวิธีทำสัญลักษณ์ทำงานใน MS-DOS ? (เน้นเพิ่มด้วยตัวเอง).)