出于测试目的,我想使用命令头激活或不激活过滤。
例如,下面的命令可以输出很多行
#!/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