Trong các thành phần tên đường dẫn trên Unix, chỉ có thể không sử dụng hai ký tự: ký tự null, chấm dứt các chuỗi trong C (ngôn ngữ của kernel) và dấu gạch chéo, được dành riêng làm dấu tách đường dẫn. Hơn nữa, các thành phần đường dẫn không thể là chuỗi rỗng.
Vì vậy, trong một tên đường dẫn, chúng ta chỉ có hai loại mã thông báo: dấu gạch chéo và thành phần.
Giả sử rằng, không cần thêm bất kỳ mã thông báo mới nào , chúng tôi muốn hỗ trợ hỗ trợ hai loại đường dẫn, tương đối và tuyệt đối. Hơn nữa, chúng tôi muốn có thể tham khảo thư mục gốc, không có tên (nó không có cha mẹ sẽ đặt tên cho nó).
Làm thế nào chúng ta có thể biểu diễn các đường dẫn tương đối, đường dẫn tuyệt đối và tham chiếu đến thư mục gốc, chỉ sử dụng dấu gạch chéo?
Cách rõ ràng nhất để mở rộng ngôn ngữ (ngoài việc giới thiệu mã thông báo mới) là tạo cú pháp mới: đưa ra ý nghĩa mới cho các kết hợp mã thông báo không hợp lệ.
Các đường dẫn bắt đầu bằng dấu gạch chéo không có ý nghĩa, vậy tại sao không sử dụng dấu gạch chéo hàng đầu làm điểm đánh dấu cho biết "đường dẫn này là tuyệt đối, thay vì tương đối".
Một đường dẫn không chứa gì ngoài dấu gạch chéo cũng không hợp lệ, vậy tại sao không gán cho nó nghĩa là "thư mục gốc".
Hai ý nghĩa này liên kết với nhau vì một đường dẫn tuyệt đối bắt đầu tìm kiếm tại thư mục gốc. Nói cách khác, một dấu gạch chéo hàng đầu có thể được coi là có ý nghĩa:
- điều hướng đến thư mục gốc và sử dụng ký tự gạch chéo.
- nếu có nhiều tài liệu hơn trong đường dẫn, thì hãy xử lý nó như một đường dẫn tương đối, nếu không thì bạn đã hoàn thành.
Sau đó, chúng ta cũng có thể ném vào một dấu gạch chéo, có nghĩa là "đường dẫn này khẳng định rằng thành phần đường dẫn cuối cùng là tên của một thư mục chứ không phải là một tệp thông thường hoặc bất kỳ loại đối tượng nào khác: dấu gạch chéo đó biểu thị thư mục đó tương tự như cách dấu gạch chéo hàng đầu biểu thị thư mục gốc. "
Với tất cả cú pháp trên, chúng ta vẫn có cú pháp với ý nghĩa chưa được gán: dấu gạch chéo kép, dấu gạch chéo ba, v.v.
Tại sao không chỉ giới thiệu một mã thông báo khác và làm điều đó khác đi. Điều này có lẽ là do các nhà thiết kế đã thực hiện các phương pháp tối giản nói chung. (Tại sao ed
trình chỉnh sửa chỉ hiển thị ?
khi bạn làm điều gì đó sai?) Dấu gạch chéo rất dễ gõ, không yêu cầu thay đổi. Một ngôn ngữ đường dẫn chỉ có hai loại mã thông báo (thành phần và dấu gạch chéo) rất dễ nhớ và sử dụng.
Một xem xét quan trọng khác là các thao tác dễ dàng của các đường dẫn có thể chỉ bằng cách sử dụng các biểu diễn chuỗi. Chẳng hạn, chúng ta có thể "root lại" các đường dẫn tuyệt đối đến một thư mục cha mới khá dễ dàng:
OLD_PATH=/old/path
NEW_HOME=/new/home
NEW_PATH="$NEW_HOME$OLD_PATH" /new/home/old/path
Điều này sẽ không hoạt động nếu chúng tôi chỉ ra các đường dẫn tuyệt đối theo một cách khác, như ký hiệu đô la hàng đầu hoặc bất cứ điều gì khác:
OLD_PATH=^old/path # ^ means absolute path
NEW_HOME=^new/home
# now we need more string kung-fu than just catenation
NEW_PATH="$NEW_HOME/${OLD_PATH#^}"
Loại mã hóa này vẫn cần thiết trong một số trường hợp khi xử lý các đường dẫn kiểu Unix, nhưng có ít hơn.
cd /home
tương đương vớicd /home/
việc nối thêm/
vào cuối tên trống cung cấp quyền truy cập vào thư mục đó.