テスト目的でコマンドヘッダーを使用してフィルタリングを有効または無効にしようとしません。
たとえば、次のコマンドは複数行を出力できます。
#!/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