Portál AbcLinuxu, 29. října 2025 15:47
$ basename2() { set -- "${1%$2}"; echo ${1##*/}; }
$ basename2 /usr/bin/
$ basename /usr/bin/
bin
$ basenameset /usr/bin/ $tedy prázdný řetězec.
.
$ basenameset a /usr/bin/ $ echo $a
. Když už to někdo chce takto použít, tak si to může fixnout. Pro běžné použití je to zbytečné.
. Kdybys to nazval něco jako basename, tak klidně
.
A čím jiným vykuchat název adresáře než pomocí basename?
$ cat basename.py
#!/usr/bin/env python
import os
for file in os.listdir('.'):
a = os.path.basename('./' + file)
$ time ./basenameset.sh
real 0m3.417s
user 0m3.152s
sys 0m0.096s
$ time ./basename.py
real 0m0.343s
user 0m0.252s
sys 0m0.076s
Takže v Pythonu je to asi tak desetkrát rychlejší. O složitosti nemluvě. Ale je pravda, že to není úplně _přesně_ totéž.
basename_in_shell.sh. Myslým, že se budete dost divit. Mimochodem perlivé #!/usr/bin/env perl use File::Basename; $a=basename($_) foreach (<.*>);je o 5% rychlejší :) (Což bude nejspíš stejně způsobeno o chlup rychlejším natažením perl interpretru než pythonu)
#!/usr/bin/env perl use File::Basename; $a=basename($_) foreach (<*>);což je jen o cca 2% rychlejší.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.