บางครั้งพา ธ สัมบูรณ์ที่มีความยาวเช่นในพารามิเตอร์บรรทัดคำสั่งไปยังเครื่องมือ linux สามารถทำให้สั้นลงโดยใช้ไดเรกทอรีการทำงานปัจจุบันเป็นข้อมูลอ้างอิง:
$ pwd
/home/heh
$ cat /home/heh/mydir/myfile
my stuff
$ cat mydir/myfile
my stuff
ในการท้าทายนี้คุณควรสร้างฟังก์ชันหรือโปรแกรมที่รับพารามิเตอร์สองตัว:
- พา ธ สัมบูรณ์โดยใช้รูปแบบ linux (เริ่มต้นด้วย
/
) - ไดเรกทอรีปัจจุบันโดยใช้รูปแบบเดียวกัน
เอาต์พุตจะสั้นกว่าดังต่อไปนี้:
- อินพุต 1 ไม่เปลี่ยนแปลง
- พา ธ สัมพัทธ์ที่อ้างถึงไฟล์ / ไดเร็กทอรีเดียวกันกับพา ธ สัมบูรณ์
คะแนนดี:
- หากระบบปฏิบัติการของคุณเข้ากันได้กับ linux คุณสามารถใช้ไดเรกทอรีปัจจุบันของระบบแทนการรับมันเป็นอินพุต
- คุณสามารถสมมติว่าอินพุตมีอักขระตัวอักษรและตัวเลขเท่านั้น (และตัวคั่นพา ธ )
- คุณสามารถสันนิษฐานได้ว่าเส้นทางสัมบูรณ์การป้อนข้อมูลไม่มีตัวคั่นเส้นทาง
/
ในตอนท้าย - คุณสามารถสมมติว่าไดเรกทอรีปัจจุบันของการป้อนข้อมูลมีตัวคั่นเส้นทาง
/
ในตอนท้าย - คุณไม่สามารถสันนิษฐานได้ว่าพา ธ สัมบูรณ์อ้างถึงไฟล์ที่มีอยู่หรือส่วนใด ๆ ของมันเป็นไดเรกทอรีที่เข้าถึงได้ อย่างไรก็ตามไดเรกทอรีปัจจุบันสามารถสันนิษฐานได้ว่าถูกต้อง
- คุณสามารถสันนิษฐานได้ว่าไม่มี symlink ที่ใดก็ได้ที่อยู่ใกล้เส้นทางใด - เพราะฉันไม่ต้องการวิธีพิเศษในการจัดการกับ symlink
- ไม่จำเป็นต้องสนับสนุนเคสที่อินพุตใด ๆ เป็นไดเร็กทอรีรูท
- "ไดเรกทอรีปัจจุบัน" ควรส่งออกเป็น
.
(สตริงว่างไม่ถูกต้อง)
กรณีทดสอบ (อินพุต 1, อินพุต 2, เอาต์พุต):
/home/user/mydir/myfile
/home/user
mydir/myfile
/var/users/admin/secret/passwd
/var/users/joe/hack
../../admin/secret/passwd
/home/user/myfile
/tmp/someplace
/home/user/myfile
/dir1/dir2
/dir1/dir2/dir3/dir4
../..
/dir1/dir2
/dir1/dir2
.
/home/test /home/user/mydir/myfile /home/test
และ/a/b /a/b/d/e /a/b
/
ในตอนท้าย". อย่างไรก็ตามในตัวอย่างของคุณนี่ไม่ใช่กรณี