到目前为止,cat
奖的无用使用是众所周知的,并且还提到了无用的使用echo
(与该问题无关)。我想知道是否应该有“无用的echo
Bash奖”:根据一些非常不科学的测量,管道似乎比heredocs和herestring慢得多:
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
串
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
vs. cat <<< "test string"
vs. echo "test string" | cat
或cat <<'END'
vs. cat <<< 'test string'
vs. echo 'test string' | cat
,以使Shell对字符串执行相同数量的扩展。
$(seq $reps)
吗?
seq
”奖励;-)