ว่าฉันมีตัวแปรหลายตัวในเชลล์สคริปต์ (เช่นใน zsh):
FOLDER_1, FOLDER_2, etc.
/
ตัวแปรเหล่านี้หมายถึงโฟลเดอร์ลงมาจาก ตัวอย่างเช่นถ้าฉันมีเส้นทาง/home/me/stuff/items
ตัวแปรจะเป็น:
FOLDER_1='home'
FOLDER_2='me'
FOLDER_3='stuff'
ตอนนี้พูดว่าฉันต้องการที่จะสร้างเส้นทางที่สอดคล้องกันกลับมาโดยการเชื่อมโยงตัวแปร วิธีหนึ่งที่เป็นไปได้คือการสร้างเส้นทางดังนี้:
PATH=$FOLDER_1/$FOLDER_2/$FOLDER_3/
อย่างไรก็ตามบอกว่าตัวแปรบางตัวFOLDER_i
มาพร้อมกับเครื่องหมายสแลชข้างหน้าในขณะที่คนอื่นไม่ทราบ (และเราไม่รู้ว่า)
FOLDER_1='home'
FOLDER_2='stuff/'
FOLDER_3='items'
คำถามของฉันคือ: ฉันจะสร้างเส้นทางที่แข็งแกร่งได้อย่างไร (เช่นหลีกเลี่ยงการทับสองครั้งและเพิ่มในที่ที่จำเป็น)
ฉันคิดว่าวิธีหนึ่งในการทำเช่นนี้คือการเพิ่ม/
ตัวแปรระหว่างคู่เสมอจากนั้นลบรายการที่ซ้ำกันด้วยsed
แต่ฉันไม่สามารถทำงานได้ (ฉันไม่แน่ใจว่าฉันจัดการ/
อย่างถูกต้องหรือไม่sed
)
นอกจากนี้ฉันจะสร้างล้อใหม่ได้หรือไม่ (เช่นมีในตัวที่ทำเช่นนี้แล้ว?)
ในที่สุดถ้าตัวแปรอยู่ในอาร์เรย์เช่นFOLDERS
มันเป็นไปได้ไหมที่จะทำโดยไม่ต้องวนซ้ำ? (หรืออีกวิธีหนึ่งโดยการวนซ้ำ แต่ไม่ทราบว่าFOLDERS
มีจำนวนเท่าใดในอาเรย์)
%
วิธีการเดียวใช้งานได้กับเครื่องหมายสแลชเดี่ยวที่กล่าวถึงในภารกิจ เพื่อรองรับเมื่อมีหลายสแลช${parts[@]%%/*}
ทำงาน นี่คือลิงค์ไปยังข้อมูลเพิ่มเติมอีกเล็กน้อยเกี่ยวกับปัญหาการทับ: ทับสองหมายความว่าในเส้นทาง UNIX? Is 'cd dir / subdir // ใช้ได้ ...