(6 odpovědí)
Uzavřeno před 3 lety.
V unixu/linuxu je jakýkoli počet po sobě jdoucích lomítek v cestě obecně ekvivalentní jedinému lomítku. např.
$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum
Z nějakého důvodu jsou dvě lomítka na začátku absolutní cesty ošetřena speciálně. např.
$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum
Jakýkoli další počet po sobě jdoucích lomítek kdekoli jinde v patchi bude zkrácen, ale dvě na začátku zůstanou, i když se potom pohybujete po souborovém systému vzhledem k němu.
Proč je to? Je nějaký rozdíl mezi /… a //…?
Přijatá odpověď:
Z větší části jsou opakované lomítka v cestě ekvivalentní jedinému lomítku. Toto chování je nařízeno standardem POSIX a většina aplikací jej následuje. Výjimkou je, že „název cesty, který začíná dvěma po sobě jdoucími lomítky, lze interpretovat způsobem definovaným implementací“ (ale ///foo
je ekvivalentní /foo
).
Většina unice nedělá nic zvláštního se dvěma počátečními lomítky. Zejména Linux ne. Cygwin dělá://hostname/path
přistupuje k síťové jednotce (SMB).
To, co vidíte, ve skutečnosti není, že by Linux dělal něco zvláštního s //
:je to aktuální sledování adresáře bash. Porovnejte:
$ bash -c 'cd //; pwd'
//
$ bash -c 'cd //; /bin/pwd'
/
Bash přijímá opatření, že operační systém může zacházet s //
speciálně a udržet si to. Dash dělá to samé. Ksh a zsh ne, když běží na Linuxu, myslím (nekontroloval jsem), že mají nastavení doby kompilace.