Почему `//` отображается только для каталогов первого уровня? [dубликат]

Этот вопрос уже имеет ответ здесь: что такое каталог с двойной косой чертой (//)? 1 ответ

Для корневого каталога в подсказке будет отображаться //:

─────────────────────────────────────────────────────────────────────────────── rick@alien:~$ cd / ─────────────────────────────────────────────────────────────────────────────── rick@alien:/$ cd // ─────────────────────────────────────────────────────────────────────────────── rick@alien://$ cd /// ─────────────────────────────────────────────────────────────────────────────── rick@alien:/$

Вы можете перейти в каталог //. Но когда вы перейдете в каталог ///, он вернет вас к /.

Подкаталоги не отображаются одинаково:

─────────────────────────────────────────────────────────────────────────────── rick@alien:~$ cd /usr ─────────────────────────────────────────────────────────────────────────────── rick@alien:/usr$ cd /usr//src ─────────────────────────────────────────────────────────────────────────────── rick@alien:/usr/src$ ─────────────────────────────────────────────────────────────────────────────── rick@alien:/usr/src$ cd //usr ─────────────────────────────────────────────────────────────────────────────── rick@alien://usr$ ─────────────────────────────────────────────────────────────────────────────── rick@alien://usr$ cd ///usr ─────────────────────────────────────────────────────────────────────────────── rick@alien:/usr$

Как вы видите // автоматически преобразуется в один / в подкаталоги. Однако это правило не относится к каталогам первого уровня.

Почему // отображается для каталогов верхнего уровня, но не подкаталогов?

-2
задан 20 April 2018 в 16:04

2 ответа

Вторая косая черта не имеет смысла, и правильное поведение для системы относится к ней так, как если бы она была одной косой чертой.

Ваша оболочка нормализует путь, так что она отображается без дополнительной косой черты во всех случаях, кроме одного: когда путь начинается с двух косых черт. В этом случае оболочка сохраняет вторую косую черту в соответствии со стандартами POSIX, которые позволяют путям, начинающимся с двух сокращений, иметь особое значение, определенное контекстом. В этом контексте, однако, нет особого значения, и в конечном итоге его игнорируют, даже если оболочка сохраняет его.

3
ответ дан 17 July 2018 в 20:48

Вторая косая черта не имеет смысла, и правильное поведение для системы относится к ней так, как если бы она была одной косой чертой.

Ваша оболочка нормализует путь, так что она отображается без дополнительной косой черты во всех случаях, кроме одного: когда путь начинается с двух косых черт. В этом случае оболочка сохраняет вторую косую черту в соответствии со стандартами POSIX, которые позволяют путям, начинающимся с двух сокращений, иметь особое значение, определенное контекстом. В этом контексте, однако, нет особого значения, и в конечном итоге его игнорируют, даже если оболочка сохраняет его.

3
ответ дан 23 July 2018 в 21:27
  • 1
    POSIX требует, чтобы повторяющиеся косые черты обрабатывались как одна косая черта, за исключением случая ровно двух слэшей в начале пути (//foo в отличие от ///foo или /foo//bar), где слева // осталось система для интерпретации специально при необходимости (сетевые ресурсы на Windows, узлы на QNX и т. д.). – muru 15 February 2018 в 09:46
  • 2
    Спасибо за эту информацию, я добавил к ответу и сделал его сообществом wiki. – thomasrutter 15 February 2018 в 15:19

Другие вопросы по тегам:

Похожие вопросы: