У компонентах імені шляху в Unix не можна використовувати лише два символи: нульовий символ, який закінчує рядки на C (мова ядра), і косу рису, яка зарезервована як роздільник шляху. Крім того, компоненти контуру не можуть бути порожніми рядками.
Отже, у назві контуру ми маємо лише два види жетонів: косою рисою та складовою.
Припустимо, що, не додаючи жодних нових лексем , ми хотіли б підтримувати підтримку двох типів шляхів, відносної та абсолютної. Крім того, ми хотіли б мати можливість посилатися на кореневий каталог, який не має імені (у нього немає батька, який би дав йому ім'я).
Як ми можемо представити відносні шляхи, абсолютні шляхи та посилатися на кореневий каталог, використовуючи лише косу рису?
Найбільш очевидний спосіб розширення мови (крім введення нового лексеми) - це створення нового синтаксису: надайте нового значення комбінаціям лексем, які є недійсним синтаксисом.
Шляхи, які починаються з косої риски, не мають сенсу, тому чому б не використовувати провідну косу рису в якості маркера, який вказує "цей шлях є абсолютним, а не відносним".
Шлях, який не містить нічого, крім косої риски, також недійсний, тому чому б не призначити йому значення "кореневий каталог".
Ці два значення пов'язані між собою, оскільки абсолютний шлях починає пошук у кореневій директорії. Іншими словами, провідну косу рису можна вважати таким, що має значення:
- перейдіть до кореневого каталогу та споживайте символ косої риски.
- якщо на шляху є більше матеріалу, обробіть його як відносний шлях, інакше ви закінчите.
Тоді ми можемо також кинути в косу рису, що може означати, що "цей шлях стверджує, що останній компонент шляху - це ім'я каталогу, а не звичайний файл або будь-який інший тип об'єкта: цей треш-косої риси позначає цей каталог аналогічно до те, як ведуча коса риса позначає кореневу директорію. "
При всьому цьому вище синтаксисі ми все ще маємо синтаксис із непризначеним значенням: подвійні косої риски, потрійні косої риски тощо.
Чому б просто не ввести ще один маркер і зробити це по-іншому. Це, мабуть, тому, що дизайнери взагалі застосовували мінімалістичні підходи. (Чому ed
редактор відображає лише a, ?
коли ви щось зробили не так?) Нахил косих просто набирається, не вимагаючи змін. Мова шляху лише з двома типами токенів (компонент і косою рисою) легко запам'ятовується та використовується.
Ще одне важливе враження полягає в тому, що прості маніпуляції з шляхами можливі, використовуючи лише рядкові представлення. Наприклад, ми можемо досить легко «відновити» абсолютні шляхи до нового батьківського каталогу:
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/
додаванню/
в кінці порожнього імені, забезпечує доступ до цього каталогу.