我为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
是否不可能通过函数使用变量绑定?
答案 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