( Zahy | 2020. 12. 30., sze – 20:50 )

Ja, shell-scriptek írásánál ami lassú, az a sok fork/exec. Azaz amit meg lehet írni a sjaát belső eszközeivel, azt abban érdemes, de nyilván mértékkel. Amiket láttam ilyen scripteket, azokban jellemzően ott lehet sebességet nyerni, amiket apal írt, meg ha a grep izé | awk '{ ecet ; }'   jellegű kódot "optimalizálod" awk '/izé/ { ecet ; }' formába. (spóroltál egy pipe létrehozást, két átirányítást, nehány fork-ot, stb). Nyilván mindenen lehet extra futásidőt nyerni, de emberek nem szoktak mikrooptimalizációval szarakodni. De mutatok extrém példát. Alanti kóddal pl. éppen lehet tesztelni, hogy adott shell esetén a szimpla "változó növelése eggyel" művelet 5 lényegesen különböző formája között is van érzékelhető futásidő különbség, az más kérdés, hogy nem túl esélyes, hogy 600 ezres ciklusban csinál valaki ilyet, de ezzel együtt is 2 másodpercnyi különbség adódik stabilan a legjobb és legrosszabb futásidők között. :-) (és akkor az original Bourne-shell-ben használt i=`expr $i + 1` forma nem is szerepelt a tesztben - ez amúgy pont a fork/exec miatt nagyon sokkal lenne lassabb).

echo 'i=$(( i + 1 ))'
i=0
time while [[ i -lt 655350 ]] ; do
i=$(( i + 1 ))
done

echo 'let i=i+1'
i=0
time while [[ i -lt 655350 ]] ; do
let i=i+1
done

echo '(( i=i+1 ))'
i=0
time while [[ i -lt 655350 ]] ; do
(( i=i+1 ))
done

echo '(( i++ ))'
i=0
time while [[ i -lt 655350 ]] ; do
(( i++ ))
done

typeset -i i
echo 'i=i+1'
i=0
time while [[ i -lt 655350 ]] ; do
i=i+1
done