jq的变量绑定通过函数起作用吗?

时间:2018-07-29 15:50:00

标签: variables scope global-variables jq

我为jq使用以下脚本:

$ jq -n 'def f: $a; 1 as $a | $a'
1

由于未使用f,因此将按预期输出1。但是:

$ jq -n 'def f: $a; 1 as $a | f'
jq: error: a/0 is not defined at <top-level>, line 1:
def f: $a; 1 as $a | f
jq: 1 compile error

是否不可能通过函数使用变量绑定?

1 个答案:

答案 0 :(得分:0)

在jq中,按变量定义作用域。将f定义为$a时,如果f$a是可见的,则$a只能被评估为f。例如,可以使用命令行参数之一,例如“ arg”或“ argjson”来实现此目的。

也可以通过以下方式实现:

jq -n '2 as $a | def f: $a; f'

还请注意,词法作用域也可用于子功能:

def f($a): def g: $a; g;
f(1)

产量:

1