今ではcat
賞の無用使用は非常によく知られており、無用の使用echo
についても言及されています(この質問には関係ありません)。「echo
バッシュインアワードの役に立たない使用」があるべきかどうか疑問に思っています:非常に非科学的な測定によると、配管はヒアドキュメントとヒアストリングよりもはるかに遅いようです:
ヒアドキュメント:
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はほぼ同じ速度です(これは複数のテストからの1つのデータセットにすぎません)が、リダイレクトは一貫して50%以上遅くなります。私は何かを誤解していますか、これはBashの標準入力を読み取るコマンドの一般的なルールとして使用できますか?
cat <<END
対cat <<< "test string"
対echo "test string" | cat
またはcat <<'END'
対cat <<< 'test string'
対をecho 'test string' | cat
文字列にシェルによって実行される展開の同じ量を持っています。
$(seq $reps)
か?
seq
」賞を許可します;