Cho đến nay, việc sử dụng cat
giải thưởng vô dụng đã rất nổi tiếng và cũng có đề cập đến việc sử dụng vô dụngecho
(không liên quan đến câu hỏi này). Tôi đang tự hỏi liệu có nên sử dụng echo
"Giải thưởng vô dụng trong Bash" hay không: Đường ống dường như chậm hơn nhiều so với heredocs và herestrings theo một số phép đo rất không khoa học:
Di truyền
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
Chuyển hướng
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
Nhìn chung, heredocs và herestrings có cùng tốc độ (đây chỉ là một bộ dữ liệu từ một số thử nghiệm) trong khi chuyển hướng chậm hơn 50%. Tôi có hiểu nhầm điều gì không, hay điều này có thể được sử dụng như một quy tắc chung cho các lệnh đọc đầu vào tiêu chuẩn trong Bash?
cat <<END
với so cat <<< "test string"
với echo "test string" | cat
hoặc cat <<'END'
so cat <<< 'test string'
với echo 'test string' | cat
để có cùng số lượng mở rộng được thực hiện bởi trình bao trên chuỗi.
$(seq $reps)
sao?
seq
giải thưởng " sử dụng vô ích " ;-)