basename
คำแนะนำของฉันคือการใช้งาน
มันเป็นค่าเริ่มต้นใน Ubuntu, รหัสง่าย ๆ และจัดการกับกรณีส่วนใหญ่
ต่อไปนี้เป็นกรณีย่อยบางส่วนที่จะจัดการกับช่องว่างและหลายจุด / ส่วนขยายย่อย:
pathfile="../space fld/space -file.tar.gz"
echo ${pathfile//+(*\/|.*)}
มันมักจะกำจัดการขยายจากครั้งแรก.
แต่ล้มเหลวใน..
เส้นทางของเรา
echo **"$(basename "${pathfile%.*}")"**
space -file.tar # I believe we needed exatly that
นี่คือหมายเหตุสำคัญ:
ฉันใช้เครื่องหมายคำพูดคู่ภายในเครื่องหมายคำพูดคู่เพื่อจัดการกับช่องว่าง ใบเสนอราคาเดียวจะไม่ผ่านเนื่องจากการส่งข้อความ $ Bash ผิดปกติและอ่านเครื่องหมายคำพูด "ที่สอง" เป็นครั้งแรก "เนื่องจากการขยายตัว
อย่างไรก็ตามคุณยังคงต้องคิด .hidden_files
hidden="~/.bashrc"
echo "$(basename "${hidden%.*}")" # will produce "~" !!!
ไม่ใช่ผลลัพธ์ที่คาดหวัง "" ที่จะทำให้มันเกิดขึ้นใช้$HOME
หรือ/home/user_path/
เพราะทุบตีอีกครั้งคือ "ผิดปกติ" และไม่ขยาย "~" (ค้นหาทุบตี BashPitfalls)
hidden2="$HOME/.bashrc" ; echo '$(basename "${pathfile%.*}")'
basename $filename .exe
จะทำในสิ่งเดียวกัน นั่นคือสมมติว่าคุณรู้เสมอว่าคุณต้องการลบส่วนขยายใด