조건부 출력 필터(헤더 또는 "있는 그대로" 출력)를 설정하는 가장 좋은 방법

조건부 출력 필터(헤더 또는 "있는 그대로" 출력)를 설정하는 가장 좋은 방법

테스트 목적으로 명령 헤더를 사용하여 필터링을 활성화하거나 활성화하지 않으려고 합니다.

예를 들어 다음 명령은 여러 줄을 출력할 수 있습니다.

#!/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

관련 정보