(6 risposte)
Chiuso 3 anni fa.
In unix/linux, qualsiasi numero di barre consecutive in un percorso è generalmente equivalente a una singola barra. es.
$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum
Eppure, per qualche ragione, due barre all'inizio di un percorso assoluto sono trattate in modo speciale. es.
$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum
Qualsiasi altro numero di barre consecutive in qualsiasi altra parte di una patch viene troncato, ma ne rimarranno due all'inizio, anche se poi navighi nel filesystem relativo ad esso.
Perchè è questo? C'è qualche differenza tra /... e //... ?
Risposta accettata:
Per la maggior parte, le barre ripetute in un percorso equivalgono a una singola barra. Questo comportamento è imposto da POSIX e la maggior parte delle applicazioni segue l'esempio. L'eccezione è che "un percorso che inizia con due barre successive può essere interpretato in un modo definito dall'implementazione" (ma ///foo
è equivalente a /foo
).
La maggior parte degli Unice non fa nulla di speciale con due tagli iniziali. Linux, in particolare, no. Cygwin fa://hostname/path
accede a un'unità di rete (SMB).
Quello che vedi non è, infatti, Linux che fa qualcosa di speciale con //
:è il monitoraggio della directory corrente di bash. Confronta:
$ bash -c 'cd //; pwd'
//
$ bash -c 'cd //; /bin/pwd'
/
Bash sta prendendo la precauzione che il sistema operativo potrebbe trattare //
appositamente e mantenendolo. Dash fa lo stesso. Ksh e zsh non lo fanno quando sono in esecuzione su Linux, immagino (non ho verificato) abbiano un'impostazione in fase di compilazione.