条件付き出力フィルタ(ヘッダーまたは「現状のまま」出力)を設定する最良の方法

条件付き出力フィルタ(ヘッダーまたは「現状のまま」出力)を設定する最良の方法

テスト目的でコマンドヘッダーを使用してフィルタリングを有効または無効にしようとしません。

たとえば、次のコマンドは複数行を出力できます。

#!/bin/bash
produce_a_lot_of_lines

head必要に応じて変数に基づいてフィルタを設定したいと思います。次の例が機能します。

#!/bin/bash
function filter() {
  [[ "$HEAD" =~ [0-9]+ ]] && head -n $HEAD || cat
}
produce_a_lot_of_lines | filter

これを達成するためのよりクリーンで効率的で、より良い方法はありますか?

答え1

もう少し再利用可能な方法:

function filter() {
    local nb_lines="$1"; shift
    if  [[ "$nb_lines" =~ ^[0-9]+$ ]]; then
        "$@" | head -n "$nb_lines"
    else
        "$@"
    fi
}

filter "$HEAD" produce_a_lot_of_lines

関連情報