14

На моем компьютере с Linux в bash у меня есть доступ к папке "двойной корень", обозначенной двумя косыми чертами:

tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls 
bin/ cdrom@ ...

Содержимое папки и ее подпапки идентично "обычному" корню с одним слешем. Двойная косая черта не исчезает, когда я открываю подпапки. Аномалия не повторяется с тремя или более косыми чертами; это простые синонимы для корня:

tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $

Что это за место? Это ошибка? Кто-нибудь может объяснить аномалию?

4 ответа4

18

Из Bash FAQ E10:

E10) Почему «cd //» оставляет $ PWD как «//»?

POSIX.2 в своем описании 'cd' говорит, что три или более начальных слеша могут быть заменены одним слешем при канонизации текущего рабочего каталога.

Это, я полагаю, для исторической совместимости. Некоторые версии Unix и ранние сетевые файловые системы использовали пути в форме // имя хоста / путь для доступа к «пути» на сервере «имя хоста».

1

«Это не ошибка, это особенность!"

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

0

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

0

Несколько косых черт рассматриваются как одна косая черта в целях разрешения имен путей.

В приглашении оболочки вы видите артефакт обработки bash PS1 (см. Раздел "ПРЕДУПРЕЖДЕНИЕ" на странице руководства bash).

[root@linux /]# cd /    ; echo $PWD
/
[root@linux /]# cd //   ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/

Результат - только вопрос представления; Вы всегда находитесь в одном корневом каталоге. Вы можете проверить это, посмотрев /proc/$$/root .

[edit] Ну, я никогда не знал этого:http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 Значение «//» не определено стандартами, но «///» и больше косых черт эквивалентно "/".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .