我试图找出为什么jq
中的range()
函数允许用,
分隔参数,而对于其他函数,更普遍的风格是用;
分隔参数?我知道一个事实,如果sub()
或其他与,
一起使用的函数会抛出一个未定义的错误,很可能是因为原型不匹配。
但是为什么range在range(from;upto)
原型中是这样的呢?
$ jq -n 'range(0; 4)'
0
1
2
3
和
$ jq -n 'range(0, 4)'
0
1
2
3
对于使用,
的range(from;upto;by)
行为不正常,但我仍然希望抛出一个警告。
# runs as if did range(0; 2)
$ jq -n 'range(0, 4; 2)'
0
1
和
# runs as if did range(0; 4) + range(0; 2)
$ jq -n 'range(0; 4, 2)'
0
1
2
3
0
1
在jq-1.6
和jq-1.5
中都可以看到这一点。既然官方文档没有讨论涉及,
的原型类型,并且不太可能是一个错误,那么应该如何解释,
的行为呢?
发布于 2020-05-07 12:31:31
简而言之,jq将range/1定义为:
def range($x): range(0;$x);
因此range(0,$n)的计算结果为
range(0), range($n)
它产生流empty, range($n)
,它等同于流
range(0;$n)
要点可能是“逗号”运算符可以自由使用。
https://stackoverflow.com/questions/61657757
复制相似问题