โดยตอนนี้ใช้ประโยชน์ของcat
รางวัลเป็นที่รู้จักกันเป็นอย่างดีและยังมีการเอ่ยถึงการใช้ประโยชน์ของecho
(ไม่เกี่ยวข้องกับคำถามนี้) ฉันสงสัยว่าควรจะมี "การใช้งานไร้ประโยชน์echo
ในรางวัล Bash": การวางท่อดูเหมือนจะช้ากว่า heredocs และ herestrings มากตามการวัดทางวิทยาศาสตร์บางอย่าง:
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
การเปลี่ยนเส้นทาง
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
โดยทั่วไป heredocs และ herestrings นั้นมีความเร็วเท่ากัน (นี่เป็นเพียงชุดข้อมูลเดียวจากการทดสอบหลายชุด) ในขณะที่การเปลี่ยนเส้นทางช้ากว่า 50% อย่างต่อเนื่อง ฉันเข้าใจผิดบางอย่างหรืออาจใช้เป็นกฎทั่วไปสำหรับคำสั่งที่อ่านอินพุตมาตรฐานใน Bash
cat <<END
กับcat <<< "test string"
และecho "test string" | cat
หรือcat <<'END'
เทียบcat <<< 'test string'
กับecho 'test string' | cat
เพื่อให้มีการขยายจำนวนเท่ากันโดยเชลล์ในสตริง
$(seq $reps)
ไม่ใช่หรือ?
seq
" ;-)