// có nghĩa là gì trong một đường dẫn?


9

Tôi đã làm việc trong thiết bị đầu cuối của mình, khi tôi viết sai chính tả trong khi cdroot ( /). Tình cờ, tôi gõ //và tôi vào ga:

root@weblocalhost://#

Khi tôi gõ pwd, tôi nhận được phản hồi //nhưng khi tôi gõ ls -stôi có cùng một danh sách như trong /thư mục.

Khi bạn nhập nhiều hơn 2, tức là ///bạn nhận được:

root@weblocalhost:/#

Luôn luôn 1 /ngoại trừ 2. Có sự khác biệt nào không và //dùng để làm gì?

Câu trả lời:


8

/ tương đương với //

Từ đặc tả POSIX (nhấn mạnh thêm):

3.267 Tên đường dẫn

Một chuỗi được sử dụng để xác định một tập tin. Trong ngữ cảnh của POSIX.1-2008, tên đường dẫn có thể bị giới hạn ở các byte {PATH_MAX}, bao gồm cả byte null kết thúc. Nó có các <slash> ký tự bắt đầu tùy chọn , theo sau là 0 hoặc nhiều tên tệp được phân tách bằng các <slash> ký tự. Một tên đường dẫn có thể tùy ý chứa một hoặc nhiều <slash>ký tự dấu . Nhiều <slash>nhân vật liên tiếp được coi là giống nhau <slash>, ngoại trừ trường hợp có chính xác hai <slash>nhân vật chính.

:

4.12 Độ phân giải tên đường dẫn

...
Một tên đường dẫn bao gồm một đơn <slash>sẽ giải quyết thư mục gốc của quy trình. Một tên đường dẫn null sẽ không được giải quyết thành công. Nếu một tên đường dẫn bắt đầu bằng hai <slash>ký tự liên tiếp , thành phần đầu tiên theo sau các <slash>ký tự đầu có thể được hiểu theo cách xác định thực hiện, mặc dù nhiều hơn hai <slash>ký tự đầu sẽ được coi là một <slash> ký tự.

Để có một cuộc thảo luận thú vị về các trường hợp ngoại lệ (cygwin và thư mục), hãy xem: Làm thế nào để linux xử lý nhiều dấu tách đường dẫn liên tiếp (/ home //// tên người dùng /// tệp)?


4

Bạn có thể thêm nhiều dấu gạch chéo vào một thư mục và nó sẽ không thay đổi bất cứ điều gì.

Ví dụ, ba lệnh này đều làm như nhau:
cd /home
cd /home/
cd /home//

Sau khi bất kỳ thư mục làm việc hiện tại của tôi được đặt thành / home (kiểm tra với pwd).

Tôi đoán rằng bạn đã cấu hình lời nhắc của mình để làm điều gì đó thông minh và bạn gặp phải hành vi không lường trước được. Bạn nhận được gì khi bạn echo $PS1?

Liên kết với một nhận xét trên https://unix.stackexchange.com/ có thể giải thích nó.


PS1 của tôi trong bash trên OSX là "\ h: \ W \ u \ $" và tôi cũng nhận được hành vi kỳ lạ này. / và /// và //// và ///// đều hiển thị dưới dạng /, nhưng trường hợp đặc biệt của hai dấu gạch chéo về phía trước hiển thị dưới dạng hai dấu gạch chéo về phía trước.
Sparr

Tôi đã nhận được \ u @ \ h: \ w (<b> u </ b> ser tại <b> h </ b> las, <b> w </ b> orking dir) trong Ubuntu 12.10 nhưng tôi không thành công tái tạo vấn đề.
Hennes

không tôi nhận được luôn // khi kiểm tra pwd trong mọi trường hợp. cho tiếng vang $ PS1 tôi nhận được: \ [\ e] 0; \ u @ \ h: \ w \ a \] $ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $
Dimitris Theodoridis

Tôi chỉ tự cài đặt PS1 của mình và tôi không thể sao chép nó bằng hai dấu gạch chéo. Kỳ dị. Không phải với 1, 3 hoặc 4. Chỉ với 2. Tôi không thể giải thích điều này.
Hennes

Có thể nhận xét này từ unix.stackexchange là câu trả lời: Tôi tin rằng API compat Windows POSIX cũng sẽ xử lý // remote / ... giống như định dạng UNC path \ remote \ .... - Stephen P ngày 20 tháng 1 'lúc 3:39
Hennes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.