Pada saat Penggunaan Useless of cat
Award sangat terkenal, dan ada juga yang menyebutkan Penggunaan Useless ofecho
(tidak relevan untuk pertanyaan ini). Saya bertanya-tanya apakah harus ada "Penggunaan yang Tidak Berguna echo
dalam Bash Award": Perpipaan tampaknya jauh lebih lambat daripada heredocs dan herestrings menurut beberapa pengukuran yang sangat tidak ilmiah:
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
Pengalihan
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
Secara umum, heredocs dan herestrings memiliki kecepatan yang sama (ini hanya satu set data dari beberapa tes) sementara pengalihan secara konsisten lebih dari 50% lebih lambat. Apakah saya salah memahami sesuatu, atau dapatkah ini digunakan sebagai aturan umum untuk perintah yang membaca input standar di Bash?
cat <<END
vs cat <<< "test string"
vs echo "test string" | cat
atau cat <<'END'
vs cat <<< 'test string'
vs echo 'test string' | cat
untuk memiliki jumlah ekspansi yang sama yang dilakukan oleh shell pada string.
$(seq $reps)
?
seq
penghargaan " penggunaan yang tidak berguna " ;-)