Sto lavorando su uno script Python che passa le posizioni dei file a un sottoprocesso scp. Va tutto bene, ma mi trovo in una situazione in cui potrei finire per concatenare un percorso con un nome file tale che ci sia un doppio '/
nel percorso. So che a bash non importa se hai più separatori di file, ma mi chiedo come viene corretto esattamente. È bash che rimuove extra /
s o davvero non importa mai?
Lo chiedo perché mi salveranno diverse righe di codice per verificare la presenza di /
extra s durante la concatenazione. So che non è un grosso problema, ma sono anche curioso. Ho uno script bash che ha la riga cd //usr
(invece di cd /usr
), il che sembra implicare che potrebbe essere importante utilizzare più /
s in un percorso
Risposta accettata:
Sono consentite più barre che equivalgono a una singola barra. Dalla specifica Single Unix (versione 4), definizioni di base §3.271 percorso:"Più barre successive sono considerate uguali a una barra".
C'è un'eccezione:se un percorso inizia con due caratteri slash successivi, il primo componente che segue i caratteri slash iniziali può essere interpretato in un modo definito dall'implementazione. (rif:definizioni di base §4.13 risoluzione del percorso). Linux stesso non lo fa, anche se alcune applicazioni potrebbero farlo e altri sistemi unix-ish (ad esempio Cygwin).
Un /
finale alla fine di un nome di percorso forza il nome di percorso a fare riferimento a una directory. In (POSIX 1003.1-2001 (Single Unix v4) definizioni di base §4.11 risoluzione del percorso, un /
finale è equivalente a un /.
finale . Definizioni di base POSIX 1003.1-2008 (Single Unix v4) §4.13 rimuove il requisito per renderlo equivalente a /.
, per far fronte a directory inesistenti (ad es. mkdir foo/
è necessario per funzionare, mentre mkdir foo/.
non lo farebbe — vedi la motivazione del cambiamento).
Per i programmi che agiscono su una voce di directory, se foo
è un collegamento simbolico a una directory, quindi passa foo/
è un modo per far agire il programma sulla directory invece del collegamento simbolico.
¹ Si noti che questo vale solo per la risoluzione del percorso, cioè quando si accede ai file. Le manipolazioni dei nomi dei file possono funzionare in modo diverso. Ad esempio basename
e dirname
ignora le barre finali.