วิธีการแยกชื่อไฟล์โดยไม่มีนามสกุลจากเส้นทางแบบเต็ม?


9

$1ฉันพยายามที่จะขวาสคริปต์ทุบตีครั้งแรกของฉันและเมื่อถึงจุดหนึ่งชื่อไฟล์ที่ถูกส่งไปยังสคริปต์ที่เป็น ฉันต้องการแยกชื่อไฟล์โดยไม่มีนามสกุล
ขณะนี้ฉันสมมติว่าส่วนขยายทั้งหมดเป็นตัวอักษรสามตัวดังนั้นฉันจึงลบอักขระ 4 ตัวสุดท้ายเพื่อรับชื่อไฟล์:

a="${1:0:-4}"

แต่ฉันต้องสามารถทำงานกับส่วนขยายที่มีอักขระมากกว่าสามตัวเช่น%~n1ใน Windows
มีวิธีใดที่จะแตกชื่อไฟล์โดยไม่มีนามสกุลจากการขัดแย้ง?


คำตอบ:


23

วิธีปกติในการทำ bash คือใช้การขยายพารามิเตอร์ (ดูหน้าbash man และค้นหา "การขยายพารามิเตอร์")

a=${1%.*}

%แสดงให้เห็นว่าทุกอย่างที่ตรงกับรูปแบบดังต่อไปนี้ ( .*) $1จากขวาโดยใช้การจับคู่ที่สั้นที่สุดคือการถูกลบออกจากพารามิเตอร์ ในกรณีนี้คุณไม่จำเป็นต้องมีเครื่องหมายคำพูดคู่ (") ล้อมรอบนิพจน์


โดยทั่วไปรูปแบบไฟล์จะเป็นดังนี้: "Something.eng.ext" แน่นอนในกรณีนี้คือส่วนขยาย แต่การใช้ $ {1%. *} จะส่งคืนเฉพาะส่วน "บางสิ่ง" ใช่ไหม
user304822

1
ฉบับที่จะกลับมา${1%.*} Something.engหากคุณต้องการที่จะตัดออกทุกอย่างไปทางขวาของครั้งแรก.รวมทั้ง.การใช้งานซึ่งจะกลับมา${1%%.*} Something
garyjohn

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.