ในการแยกjoebloggs
จากสตริงนี้ใน bash โดยใช้การขยายพารามิเตอร์โดยไม่มีกระบวนการเพิ่มเติมใด ๆ ...
MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.com"
NAME=${MYVAR%:*} # retain the part before the colon
NAME=${NAME##*/} # retain the part after the last slash
echo $NAME
ไม่ได้ขึ้นอยู่กับjoebloggs
ความลึกที่เฉพาะเจาะจงในเส้นทาง
สรุป
ภาพรวมของโหมดการขยายพารามิเตอร์บางตัวสำหรับการอ้างอิง ...
${MYVAR#pattern} # delete shortest match of pattern from the beginning
${MYVAR##pattern} # delete longest match of pattern from the beginning
${MYVAR%pattern} # delete shortest match of pattern from the end
${MYVAR%%pattern} # delete longest match of pattern from the end
ดังนั้น#
หมายถึงการจับคู่ตั้งแต่เริ่มต้น (นึกถึงบรรทัดความคิดเห็น) และ%
หมายถึงจากจุดสิ้นสุด อินสแตนซ์หนึ่งหมายถึงสั้นที่สุดและสองอินสแตนซ์หมายถึงยาวที่สุด
คุณสามารถรับสตริงย่อยตามตำแหน่งโดยใช้ตัวเลข:
${MYVAR:3} # Remove the first three chars (leaving 4..end)
${MYVAR::3} # Return the first three characters
${MYVAR:3:5} # The next five characters after removing the first 3 (chars 4-9)
คุณยังสามารถแทนที่สตริงหรือรูปแบบเฉพาะโดยใช้:
${MYVAR/search/replace}
pattern
อยู่ในรูปแบบเดียวกับชื่อไฟล์ที่ตรงกันดังนั้น*
(ตัวอักษรใด ๆ ) เป็นเรื่องธรรมดาที่มักจะตามมาด้วยสัญลักษณ์เฉพาะเช่น/
หรือ.
ตัวอย่าง:
กำหนดตัวแปรเช่น
MYVAR="users/joebloggs/domain.com"
ลบพา ธ ออกจากชื่อไฟล์ (อักขระทั้งหมดไม่เกินเครื่องหมายทับ):
echo ${MYVAR##*/}
domain.com
ลบชื่อไฟล์ออกจากเส้นทาง (ลบการจับคู่ที่สั้นที่สุดหลังสุดท้าย/
):
echo ${MYVAR%/*}
users/joebloggs
รับเฉพาะนามสกุลไฟล์ (ลบทั้งหมดก่อนช่วงเวลาสุดท้าย):
echo ${MYVAR##*.}
com
หมายเหตุ:ในการดำเนินการสองอย่างคุณไม่สามารถรวมเข้าด้วยกันได้ แต่ต้องกำหนดให้กับตัวแปรกลาง ดังนั้นเพื่อให้ได้ชื่อไฟล์ที่ไม่มีพา ธ หรือนามสกุล:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain