Đây chỉ đơn thuần là một câu hỏi từ vựng, nhưng nó cứ quay cuồng trong đầu tôi.
Nó xuất phát từ một bài kiểm tra thực hành từ một cuốn sách luyện thi LPIC . Câu trả lời đúng theo cuốn sách ~/Documents
là một thư mục tương đối vì nó liên quan đến thư mục chính.
Tuy nhiên, cuốn sách này chứa một tỷ lệ lỗi chính tả và lỗi sai vì vậy tôi không thể chấp nhận tất cả những gì được viết ở đó. Ở đây tôi không đồng ý vì đối với tôi ~
hoạt động như một biến được mở rộng bởi shell thành nội dung của $HOME
biến hoặc đường dẫn thư mục nhà người dùng hiện tại (cf man bash
), vì vậy đường dẫn /home/myuser/Documents
thực sự là một thư mục tuyệt đối.
Ngay cả Wikipedia , lần đầu tiên, dường như không giúp ích gì cho tôi về chủ đề này (ngay cả khi nó dường như xác nhận rằng cuốn sách sai về điều này):
Một đường dẫn tuyệt đối hoặc đầy đủ trỏ đến cùng một vị trí trong một hệ thống tệp bất kể thư mục làm việc hiện tại. Để làm điều đó, nó phải chứa thư mục gốc.
Ngược lại, một đường dẫn tương đối bắt đầu từ một số thư mục làm việc nhất định, tránh việc phải cung cấp đường dẫn tuyệt đối đầy đủ.
Ở đây một lần nữa, tôi không đồng ý: theo định nghĩa này, đường dẫn /opt/kde3/bin/../lib
không phụ thuộc vào thư mục làm việc hiện tại phải là một đường dẫn tuyệt đối, tuy nhiên cách hiểu hiện tại của tôi về điều này phù hợp với tác giả của cuốn sách làm cho đường dẫn này trở thành tương đối.
Một tìm kiếm trên web nhanh chóng chỉ làm tôi thêm thất vọng, theo Webster Dictionary :
đường dẫn tuyệt đối - Một đường dẫn liên quan đến thư mục gốc. Ký tự đầu tiên của nó phải là dấu phân cách tên đường dẫn.
Vì vậy $HOME/Documents
, hoặc thậm chí $HOME
sẽ không được coi là thư mục tuyệt đối? Hay định nghĩa này ngụ ý mở rộng biến? Còn ~
nhân vật của cái vỏ thì sao? Có bất kỳ định nghĩa đáng tin cậy về thư mục tương đối so với tuyệt đối tôi có thể tìm thấy ở đâu đó và tôi có sai không?
~/foo
một con đường tương đối. Những gì bạn đang nhận được là sự khác biệt giữa mã hóa cứng và tham số hóa. Xem câu trả lời của tôi để biết thêm chi tiết.
~/Documents
và $HOME/Documents
không phải là đường dẫn. Chúng xác định đường dẫn (tuyệt đối) sau khi mở rộng, nhưng bản thân chúng không phải là đường dẫn. Tôi nghĩ điều đó đồng ý với việc có bao nhiêu người dùng Unix / Linux sử dụng thuật ngữ này, nhưng chắc chắn các chuỗi đó cũng được gọi là các đường dẫn.
/
và những đường dẫn chúng ta gọi là tuyệt đối. Như vậy tất cả mọi thứ gì bắt đầu từ/
tôi sẽ gọi tuyệt đối (thậm chí nếu điều này là/usr/../etc
) và mọi thứ khác tôi sẽ gọi tương đối (~/Doc
,Doc
,../john/Doc
,$HOME/...
, ...). Vấn đề là tuyệt đối nên hoạt động bất kể thư mục làm việc hiện tại hoặc người dùng hiện tại. Tương đối chỉ có thể làm việc trong một số trường hợp hẹp cụ thể.