ここで文字列(<<<)でsedを使用し、-aを読みます。

ここで文字列(<<<)でsedを使用し、-aを読みます。

私は文字列のすべての単語を変数に使用して割り当てsedます<<<read私がしたことは次のとおりです。

read -a A0 <<< $(sed '2q;d' /proc/stat)

したがって、sedファイルの2行目を読み、fileすぐに終了します。読み取った行がsed入力され、<<<受信した入力が拡張され、sed結果のread -a値が<<<配列要素に割り当てられます。このようにして<<<andを使用するのはsed良い考えですか、それとも反対の明白な理由がありますか?最も重要なのは、これを行うより速い方法がありますか?

ベストアンサー1

配列割り当てを直接使用できます。

A0=($(sed '2q;d' /proc/stat))

これはワイルドカードを適用することに注意してください。コマンド出力にシェルワイルドカードが含まれている場合、ワイルドカードを含む単語は一致するファイルのリスト(存在する場合)に置き換えられます。コマンド出力に文字の1つを含めることができる場合は、\[?*一時的にワイルドカードをオフにしてください。

set -f
A0=($(sed '2q;d' /proc/stat))
set +f

これは、以下を使用するよりも少し高速ですread

$ time for i in {1..1000}; do read -a A0 <<< $(sed '2q;d' /proc/stat); done

real    0m2.829s
user    0m0.220s
sys     0m0.480s

$ time for i in {1..1000}; do A0=($(sed '2q;d' /proc/stat)); done

real    0m2.388s
user    0m0.128s
sys     0m0.276s

バージョン4.0以降の場合は、bash次のものを使用できますmapfile

mapfile -t < <(sed '2q;d' /proc/stat)

しかし、mapfile最も遅いようです。

$ time for i in {1..1000}; do mapfile -t < <(sed '2q;d' /proc/stat); done

real    0m3.990s
user    0m0.104s
sys     0m0.444s

おすすめ記事