Bashでは、パイプラインの中間ノードの結果をどのように計算してキャプチャしますか?

Bashでは、パイプラインの中間ノードの結果をどのように計算してキャプチャしますか?

Bashでは、パイプラインの中間ノードの結果をどのように計算してキャプチャしますか?

たとえば、単一のBashパイプを使用して整数リストとコマンドまたは関数を指定した場合、リストを標準出力に出力しながら変数内のmaximum整数リストの最大値をどのようにキャプチャできますか?

capture_maximum_and_print_numbers以下のBashスクリプトでは、関数を単一のパイプになるように変更することがアイデアです。

function maximum {
  awk 'NR==1||$0>x{x=$0}END{print x}'
}

function capture_maximum_and_print_numbers {
  local numbers="3\n6\n1\n4\n2\n9\n5\n"
  maximum=$(printf $numbers | maximum)
  printf $numbers
}

capture_maximum_and_print_numbers
printf "maximum=$maximum\n"

ベストアンサー1

結果を厳密に変数に代入し、数値リストを1行の標準出力に出力する場合は、次のようなものを提供します。 (私はmax関数の名前を関数の機能に合わせて変更し、変数は保存された$maximum結果自体に対応します):

function calc_max {
  awk 'NR==1||$0>x{x=$0}END{print x}'
}

function capture_maximum_and_print_numbers {
  local numbers="3\n6\n1\n4\n2\n9\n5\n"
  export maximum=$(printf $numbers | tee /dev/tty | calc_max)
 

}

capture_maximum_and_print_numbers 
echo max_result="$maximum"
#You have stored the max_result variable and can pass it to whatever you want.

tee長いコマンドパイプラインの途中で、「現在」の結果を別のファイルに保存したり、標準出力に出力したりするなどの操作に使用できます。単一のパイプラインを別々のターゲットを持つ複数のコピーに分割し、同時に「プライマリ」パイプラインをチェーンの下に処理し続けます。

tee dev/ttytty現在の端末のパイプに対応し、/dev/ttyすべての* nixシステムに表示されます。

おすすめ記事