Portál AbcLinuxu, 14. července 2025 13:33
${x// /}
tr
[ivok@zero ~]$ echo 'aaaaaaaa bbbbbbbbbbb cccccccccc' |tr -d ' ' aaaaaaaabbbbbbbbbbbcccccccccc
tr
Důvodem může být to, že použití rozšířené expanze (kterou si udělá shell sám) je řádově rychlejší než spuštění externího programu na totéž. Samozřejmě, když to uděláte ve skriptu jednou nebo dvakrát, nikdo to nepozná. Ale kdyby se to mělo provádět mnohokrát v nějaké smyčce, mohlo by to už být znát. Kdysi tu např. někdo ukazoval porovnání časové náročnosti basename
a dirname
s jejich náhradami pomocí bashových expaní, výsledky vypadaly dost přesvědčivě.
>>> import re >>> re.sub(' ','','aaa bbb ccc') 'aaabbbccc'
x="aaa bbb ccc"
):
--------------------------------------------------- příkaz wallclock time [s] --------------------------------------------------- y=${x// /} 0,22 y=$(tr -d ' ' <<<"$x") 18,7 y=$(sed 's/ //g' <<<"$x") 19,7 y=$(python -c ... <<<"$x") 165 ---------------------------------------------------Ty tři tečky v pythonu jsou
import sys; sys.stdout.write(sys.stdin.read().replace(" ",""))což by mělo být o něco rychlejší než uvedené regulární výrazy, ale stejně jsme o řád jinde.
aisa:~> uname -a; echo $BASH_VERSION; stat /bin/bash IRIX64 aisa 6.5 10070055 IP27 1.14.5(1) /bin/bash: inode 4213134; dev 270; links 1; size 603840 regular; mode is rwxr-xr-x; uid 0 (root); gid 0 (root) projid 0 st_fstype: xfs change time - Tue Jul 11 06:39:33 2000 <963290373> access time - Thu Oct 13 20:57:03 2005 <1129229823> modify time - Tue Jul 11 06:39:33 2000 <963290373>
real 0m0.113s user 0m0.066s sys 0m0.009s(s výpisem výsledků do /dev/null). Takže python vítězí, že? No, ono je to složitější, protože ...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.