当分号被记录时,为什么jq允许range()函数接受逗号作为参数分隔符



我试图找出为什么jq中的range()函数允许用,分隔参数,而更通用的样式是用;分隔其他函数的参数?我知道一个事实,如果sub()或与,一起使用的其他函数会抛出一个未定义的错误,很可能是由于原型不匹配。

但为什么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.6jq-1.5中都可以看到。由于官方文档没有讨论涉及,的原型类型,也不太可能是一个bug,因此应该如何解释,的行为?

简而言之,jq将范围/1定义为:

def range($x): range(0;$x);

因此范围(0,$n(评估为

range(0), range($n)

其产生相当于流的流empty, range($n)

range(0;$n)

要点也许是"逗号"运算符可以自由使用。

最新更新