Eu comparei o tempo de execução para unix here-strings e pipe data input para bc
:
pipe
time for i in {1..1000}
do
echo "sqrt(5.09)" | bc -q > /dev/null
done
real 0m3.584s
user 0m0.899s
sys 0m2.404s
vs
aqui-strings
time for i in {1..1000}
do
bc -q <<< "sqrt(5.09)" > /dev/null
done
real 0m5.137s
user 0m0.686s
sys 0m2.262s
(estes valores são médios: testados várias vezes)
Portanto, o tempo de execução de real
com o uso de strings aqui é maior do que com os pipes,
mas a soma do user
+ sys
times ainda é menor no caso de aqui-strings como eu esperava inicialmente (echo ... | é executado em um novo processo, portanto há uma sobrecarga de execução). Por que um comportamento tão estranho de bash?
Tags bash pipe echo stdin benchmarking