ฉันค่อนข้างสับสนเกี่ยวกับการแสดงออกปกติต่อไปนี้ที่ฉันพบในเชลล์สคริปต์
${0##*/}
${0%/*}
พวกเขาทำงานอย่างไร
ฉันค่อนข้างสับสนเกี่ยวกับการแสดงออกปกติต่อไปนี้ที่ฉันพบในเชลล์สคริปต์
${0##*/}
${0%/*}
พวกเขาทำงานอย่างไร
คำตอบ:
สิ่งเหล่านี้ไม่ใช่นิพจน์ทั่วไปเป็นตัวอย่างของการขยายพารามิเตอร์ของ Bash: การแทนที่ของตัวแปรหรือพารามิเตอร์พิเศษด้วยค่าของมัน Wooledge วิกิพีเดียมีคำอธิบายที่ดี
โดยทั่วไปในตัวอย่างที่คุณมี${0##*/}แปลว่า:
สำหรับตัวแปร $ 0 และรูปแบบ '/' แฮชสองค่าเฉลี่ยจากจุดเริ่มต้นของพารามิเตอร์ลบการจับคู่ที่ยาวที่สุด (หรือโลภ) - จนถึงและรวมถึงรูปแบบ
ดังนั้นที่ไหน$0คือชื่อของไฟล์เช่น. $HOME/documents/doc.txt, จากนั้นพารามิเตอร์จะถูกขยายเป็น:doc.txt
ในทำนองเดียวกันสำหรับ${0%/*}รูปแบบ/จะถูกจับคู่กับจุดสิ้นสุดของพารามิเตอร์ (คน%) กับการแข่งขันที่สั้นที่สุดหรือไม่โลภลบ - $HOME/documentsซึ่งในตัวอย่างข้างต้นจะให้คุณ
ดูเพิ่มเติมบทความบนHacker ทุบตีของวิกิพีเดีย
*) ระบุว่าทุกอย่างจนถึงและรวมถึงรูปแบบจะถูกลบ ดังนั้นสำหรับการเริ่มต้นของพารามิเตอร์#มันอยู่ทางซ้ายและสิ้นสุด%การทำงานวิธีอื่นจากทางขวา
shPOSIX
basenameและdirname? : D