如何在`jq`中调试

使用`debug`函数的一些技巧


jq自带一个很方便的debug过滤器。在开发练习解答的过程中,可以用它来查看当前流经 jq 管道的数据。

debug会把一个“调试数组”打印到stderr。它会原样输出输入。数组的第一个元素是字符串“DEBUG:”。第二个元素取决于你如何调用debug。

  1. 不带参数的debug函数会把输入的一个紧凑表示放进调试数组:

    jq -n '[11, 22, 33] | debug | map(. * 2)'
    

    输出

     ["DEBUG:",[11,22,33]]
     [
       22,
       44,
       66
     ]
    
  2. 带一个参数的版本会把输入传给指定的过滤器:

    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