В bash, если вы перейдете на //, ваш pwd будет //, но если вы перейдете на / или ///+, то ваш pwd будет /. Есть ли причина для этого или это просто странная ошибка?
Я пробовал это в OSX и Ubuntu.
Из Bash FAQ:
E10) Почему `cd //'оставляет $ PWD как` //'?
POSIX.2 в своем описании `cd 'говорит, что три или более начальных слеша могут быть заменены одним слешем при канонизации текущего рабочего каталога.
Это, я полагаю, для исторической совместимости. Некоторые версии Unix и ранние сетевые файловые системы использовали пути в виде //имя хоста /путь для доступа к «пути» на сервере «имя хоста».
Хотя ответ был правильным на данных, которые он дал, он не совсем ответил на заданный вопрос.
Оболочка нормализует путь. Оно делает:
Вы можете проверить это с помощью strace, которая увидит, что фактически передается в системный вызов
strace -o /tmp/strace.out bash -c "cd ///tmp"
grep chdir /tmp/strace.out
# will give chdir("/tmp")
strace -o /tmp/strace.out bash -c "cd ///tmp/../etc"
grep chdir /tmp/strace.out
# will give chdir("/etc")
Оболочка выполняет нормализацию пути еще до того, как она скажет системе изменить каталог