Até agora, o Uso inútil do catprêmio é muito conhecido, e também há uma menção ao Uso inútil deecho (não relevante para esta pergunta). Gostaria de saber se deve haver um "Uso Inútil echono Prêmio Bash": a tubulação parece ser muito mais lenta que os heredocs e herestrings, de acordo com algumas medidas altamente não científicas:
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.320sHerestrings
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.324sRedirecionamento
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
Em geral, heredocs e herestrings têm aproximadamente a mesma velocidade (este é apenas um conjunto de dados de vários testes) enquanto o redirecionamento é consistentemente mais do que 50% mais lento. Estou entendendo mal algo ou isso poderia ser usado como regra geral para comandos que leem a entrada padrão no Bash?
cat <<ENDvs. cat <<< "test string"vs. echo "test string" | catou cat <<'END'vs. cat <<< 'test string'vs. echo 'test string' | catpara ter a mesma quantidade de expansões executadas pelo shell nas seqüências.
$(seq $reps)?
seq" prêmio ;-)