设置条件输出过滤器的最佳方法(头或“按原样”输出)

设置条件输出过滤器的最佳方法(头或“按原样”输出)

出于测试目的,我想使用命令头激活或不激活过滤。

例如,下面的命令可以输出很多行

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

相关内容