À présent, l' utilisation inutile du cat
prix est très bien connue, et il est également fait mention d'une utilisation inutile deecho
(non pertinente pour cette question). Je me demande s'il devrait y avoir une "utilisation inutile de echo
in Bash Award": la tuyauterie semble être beaucoup plus lente que les heredocs et les herestrings selon certaines mesures très non scientifiques:
Heredocs:
for reps in 1 2 3 do time for i in {1..1000} do cat <<'END' test string END done > /dev/null done real 0m1.786s user 0m0.212s sys 0m0.332s real 0m1.817s user 0m0.232s sys 0m0.332s real 0m1.846s user 0m0.256s sys 0m0.320s
Herestrings
for reps in 1 2 3 do time for i in {1..1000} do cat <<< 'test string' done > /dev/null done real 0m1.932s user 0m0.280s sys 0m0.288s real 0m1.956s user 0m0.248s sys 0m0.348s real 0m1.968s user 0m0.268s sys 0m0.324s
Redirection
for reps in 1 2 3 do time for i in {1..1000} do echo 'test string' | cat done > /dev/null done real 0m3.562s user 0m0.416s sys 0m0.548s real 0m3.924s user 0m0.384s sys 0m0.604s real 0m3.343s user 0m0.400s sys 0m0.552s
En général, les heredocs et les herestrings sont à peu près à la même vitesse (ce n'est qu'un ensemble de données provenant de plusieurs tests) tandis que la redirection est systématiquement plus de 50% plus lente. Suis-je en train de mal comprendre quelque chose, ou cela pourrait-il être utilisé comme règle générale pour les commandes lisant l'entrée standard dans Bash?
cat <<END
vs cat <<< "test string"
vs echo "test string" | cat
ou cat <<'END'
vs cat <<< 'test string'
vs echo 'test string' | cat
pour avoir la même quantité d'extensions effectuées par le shell sur les chaînes.
$(seq $reps)
?
seq
récompense pour " utilisation inutile de " ;-)