`debug`関数を使うときのヒントを紹介します。
jqには便利なdebugフィルターが用意されています。演習の解答を書いているときにこれを使うと、その時点でjqのパイプラインにあるデータを調べられます。
debugは「デバッグ配列」をstderrに出力します。入力はそのまま出力されます。配列の最初の要素は文字列"DEBUG:"です。2番目の要素は、debugの呼び出し方によって変わります。
引数を取らないdebug関数は、入力のコンパクトな表現をデバッグ配列に入れます:
jq -n '[11, 22, 33] | debug | map(. * 2)'
次のように出力されます
["DEBUG:",[11,22,33]]
[
22,
44,
66
]
引数を1つ取るバージョンは、入力を与えられたフィルターに通します:
jq -n '[11, 22, 33] | debug("length: \(length), last: \(.[-1])") | map(. * 2)'
["DEBUG:","length: 3, last: 33"]
[
22,
44,
66
]
フィルターは文字列である必要はありません。どんなものでも渡せます。カンマで区切った複数の式を渡して「複数行」のデバッグ出力にすることもできます:
jq -n '[11, 22, 33] as $a | 44 | debug("I am here:", $a, .)'
["DEBUG:","I am here:"]
["DEBUG:",[11,22,33]]
["DEBUG:",44]
44