Nei componenti del nome del percorso su Unix, non possono essere utilizzati solo due caratteri: il carattere null, che termina le stringhe in C (il linguaggio del kernel) e la barra, che è riservata come separatore del percorso. Inoltre, i componenti del percorso non possono essere stringhe vuote.
Quindi, nel nome di un percorso, abbiamo solo due tipi di token: una barra e un componente.
Supponiamo che, senza aggiungere nuovi token , vorremmo supportare due tipi di percorsi, relativi e assoluti. Inoltre, vorremmo essere in grado di fare riferimento alla directory principale, che non ha un nome (non ha un genitore che gli darebbe un nome).
Come possiamo rappresentare percorsi relativi, percorsi assoluti e fare riferimento alla directory principale, usando solo la barra?
Il modo più ovvio per estendere una lingua (oltre all'introduzione di un nuovo token) è quello di creare una nuova sintassi: dare un nuovo significato alle combinazioni di token che sono sintassi non valide.
I percorsi che iniziano con una barra non hanno senso, quindi perché non utilizzare una barra iniziale come marcatore che indica "questo percorso è assoluto, piuttosto che relativo".
Un percorso che non contiene altro che una barra non è valido, quindi perché non assegnargli il significato di "directory principale".
Questi due significati si uniscono perché un percorso assoluto inizia la ricerca nella directory principale. In altre parole, una barra iniziale può essere considerata come avente il significato:
- passare alla directory principale e utilizzare il carattere barra.
- se c'è più materiale nel percorso, elaboralo come percorso relativo, altrimenti hai finito.
Quindi, potremmo anche lanciare una barra rovesciata, che può significare "questo percorso afferma che l'ultimo componente del percorso è il nome di una directory anziché un file normale o qualsiasi altro tipo di oggetto: quella barra finale indica quella directory in modo simile a il modo in cui la barra iniziale indica la directory principale. "
Con tutto questo sopra la sintassi, abbiamo ancora sintassi con un significato non assegnato: doppie barre, triple barre e così via.
Perché non introdurre un altro token e farlo in modo diverso. Ciò è probabilmente dovuto al fatto che i progettisti hanno adottato approcci minimalisti in generale. (Perché l' ed
editor visualizza un solo ?
quando si fa qualcosa di sbagliato?) La barra è facile da digitare, non richiede spostamento. Un linguaggio di percorso con solo due tipi di token (componente e barra) è facile da ricordare e da usare.
Un'altra considerazione importante è che è possibile manipolare facilmente i percorsi usando solo rappresentazioni di stringhe. Ad esempio, possiamo "re-root" percorsi assoluti verso una nuova directory padre abbastanza facilmente:
OLD_PATH=/old/path
NEW_HOME=/new/home
NEW_PATH="$NEW_HOME$OLD_PATH" /new/home/old/path
Questo non funzionerebbe se avessimo indicato percorsi assoluti in qualche altro modo, come un segno di dollaro o qualsiasi altra cosa:
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#^}"
Questo tipo di codifica è ancora necessario in alcuni casi quando si ha a che fare con percorsi in stile Unix, ma ce n'è meno.
cd /home
equivale adcd /home/
aggiungere/
alla fine del nome vuoto fornisce l'accesso a quella directory.