ด้วยชื่อพา ธ แบบบัญญัติเช่นของคุณสิ่งนี้จะใช้งานได้:
set -f --; IFS=/
for p in $pathname
do [ -e "$*/$p" ] || break
set -- "$@" "$p"
done; printf %s\\n "$*"
ซึ่งจะพิมพ์ผ่านองค์ประกอบที่มีอยู่ / เข้าถึงได้ล่าสุดของ$pathnameและทำให้แต่ละองค์ประกอบแยกจากกันในอาร์เรย์ ARG องค์ประกอบที่ไม่มีตัวตนครั้งแรกไม่ถูกพิมพ์ $pแต่มันจะถูกบันทึกไว้ใน
คุณอาจเข้าหามันตรงกันข้าม:
until cd -- "$path" && cd -
do case $path in
(*[!/]/*)
path="${path%/*}"
;; (*) ! break
esac
done 2>/dev/null && cd -
ที่จะกลับมาอย่างเหมาะสมหรือจะลง$pathตามที่ต้องการ มันปฏิเสธที่จะพยายามเปลี่ยนแปลง/แต่ถ้าประสบความสำเร็จจะพิมพ์ทั้งไดเรกทอรีการทำงานปัจจุบันของคุณและไดเรกทอรีที่มันเปลี่ยนเป็น stdout ปัจจุบันของคุณ$PWDจะถูกใส่$OLDPWDเช่นกัน
access(2)ไม่ละเอียดมากดังนั้นวิธีการแก้ปัญหามักจะเกี่ยวข้องกับการเขียนสิ่งที่จะย้ำและทดสอบแต่ละองค์ประกอบในการเปิดเส้นทาง ...