В компонентах имени пути в Unix нельзя использовать только два символа: нулевой символ, который завершает строки в C (язык ядра), и косую черту, которая зарезервирована как разделитель пути. Кроме того, компоненты пути не могут быть пустыми строками.
Таким образом, в имени пути у нас есть только два вида токенов: косая черта и компонент.
Предположим, что без добавления каких-либо новых токенов мы хотели бы поддержать поддержку двух типов путей, относительных и абсолютных. Кроме того, мы хотели бы иметь возможность ссылаться на корневой каталог, у которого нет имени (у него нет родителя, который бы дал ему имя).
Как мы можем представлять относительные пути, абсолютные пути и ссылаться на корневой каталог, используя только косую черту?
Самый очевидный способ расширить язык (кроме введения нового токена) - это создать новый синтаксис: придать новый смысл комбинациям токенов, которые являются недопустимым синтаксисом.
Пути, начинающиеся с косой черты, не имеют смысла, поэтому почему бы не использовать начальную косую черту в качестве маркера, который указывает «этот путь является абсолютным, а не относительным».
Путь, который не содержит ничего, кроме косой черты, также недопустим, так почему бы не присвоить ему значение «корневой каталог».
Эти два значения связаны друг с другом, потому что абсолютный путь начинается с поиска в корневом каталоге. Другими словами, начальная косая черта может рассматриваться как имеющая значение:
- перейдите в корневой каталог и используйте символ косой черты.
- если на пути больше материала, то обработайте его как относительный путь, иначе все готово.
Затем мы могли бы также добавить завершающую косую черту, что может означать, что «этот путь утверждает, что последний компонент пути - это имя каталога, а не обычный файл или объект любого другого типа: этот конечный слеш обозначает этот каталог аналогично способ, которым начальная косая черта обозначает корневой каталог. "
При всем вышеприведенном синтаксисе у нас все еще есть синтаксис с неназначенным значением: двойная косая черта, тройная косая черта и так далее.
Почему бы просто не ввести другой токен и сделать это по-другому. Вероятно, это связано с тем, что дизайнеры использовали минималистичные подходы в целом. (Почему ed
редактор отображает только, ?
когда вы делаете что-то не так?) Косую черту легко набрать, не требуя сдвига. Язык путей только с двумя типами токенов (компонент и слеш) легко запомнить и использовать.
Другое важное соображение заключается в том, что простые манипуляции с путями возможны с использованием только строковых представлений. Например, мы можем довольно легко «перекоренить» абсолютные пути к новому родительскому каталогу:
OLD_PATH=/old/path
NEW_HOME=/new/home
NEW_PATH="$NEW_HOME$OLD_PATH" /new/home/old/path
Это не сработало бы, если бы мы указали абсолютные пути каким-либо другим способом, например, ведущим знаком доллара или чем-то еще:
OLD_PATH=^old/path # ^ means absolute path
NEW_HOME=^new/home
# now we need more string kung-fu than just catenation
NEW_PATH="$NEW_HOME/${OLD_PATH#^}"
Этот тип кодирования все еще необходим в некоторых случаях при работе с путями в стиле Unix, но его меньше.
cd /home
иcd /home/
добавление/
в конце пустого имени, обеспечивает доступ к этому каталогу.