コマンドパイプラインのさまざまな部分に複数の変数を割り当てる

コマンドパイプラインのさまざまな部分に複数の変数を割り当てる

次のように2つの変数が割り当てられているとします。

psaux=`ps aux | grep someProcessName`
pscount=`ps aux | grep someProcessName | wc -l`

「ps aux | grep someProcessName」部分が一度だけ実行されるように、割り当てを1行にまとめたいと思います。したがって、実行の間に何も変更できないことを知っています。

私が思いつく最も近いのは、次のような奇妙な疑似コードです。

read psaux pscount <<<$(ps aux | grep someProcessName | tee &1 | wc -l)

答え1

最初の変数をもう一度使用してください。

psaux="$( ps aux | grep "someProcessName" )"
pscount="$( printf '%s\n' "$psaux" | wc -l )"

このコマンドはgrep一度だけ呼び出されます。
これらの呼び出しの結果は、行数を計算するために再利用されます。

関連情報