Pracuji na skriptu python, který předává umístění souborů podprocesu scp. To je všechno v pořádku, ale jsem v situaci, kdy se mi může stát, že cestu zřetězím s názvem souboru tak, že tam bude dvojité „/ v cestě. Vím, že bash se nestará, pokud máte více oddělovačů souborů, ale zajímalo by mě, jak přesně je to opraveno. Je to bash, který odstraňuje extra / s nebo na tom opravdu nikdy nezáleží?
Ptám se, protože mi to ušetří několik řádků kódu, abych zkontroloval další / s při zřetězení. Vím, že to není nic moc, ale taky mě to zajímá. Mám bash skript, který má řádek cd //usr (místo cd /usr ), což zřejmě naznačuje, že použití více / může mít význam s v cestě
Přijatá odpověď:
Více lomítek je povoleno a jsou ekvivalentní jednomu lomítku. Ze specifikace Single Unix (verze 4), základní definice §3.271 cesta:“Více po sobě jdoucích lomítek je považováno za stejné jako jedno lomítko.”
Existuje jedna výjimka:Pokud cesta začíná dvěma po sobě jdoucími znaky lomítka, první komponenta následující za znaky úvodního lomítka může být interpretována způsobem definovaným implementací. (viz:základní definice §4.13 rozlišení názvu cesty). Samotný Linux to nedělá, i když některé aplikace ano a jiné unixové systémy ano (např. Cygwin).
Koncové / na konci názvu cesty vynutí, aby název odkazoval na adresář. V základních definicích (POSIX 1003.1-2001 (Single Unix v4) §4.11 rozlišení názvu cesty je koncový / je ekvivalentní koncovému /. . Základní definice POSIX 1003.1-2008 (Single Unix v4) § 4.13 odstraňuje požadavek, aby byl ekvivalentní /. , abyste si poradili s neexistujícími adresáři (např. mkdir foo/ je vyžadováno, aby fungovalo, zatímco mkdir foo/. ne – viz zdůvodnění změny).
Pro programy, které jednají se záznamem v adresáři, pokud foo je symbolický odkaz na adresář, který předává foo/ je způsob, jak přimět program jednat podle adresáře namísto symbolického odkazu.
¹ Upozorňujeme, že to platí pouze pro rozlišení názvu cesty, tj. při přístupu k souborům. Manipulace s názvy souborů mohou fungovat odlišně. Například basename a dirname ignorovat koncová lomítka.