为什么$module在jq中不能作为变量名?

问题描述 投票:0回答:1

jq 的这种行为是否不允许使用 $module 作为变量名,在任何地方指定?

$ jq -n --arg 'module' 'X' '$module'
jq: error: syntax error, unexpected module, expecting IDENT or __loc__ (Unix shell quoting issues?) at <top-level>, line 1:
$module 
jq: 1 compile error

我的期望是 jq 会打印“X”,但事实并非如此。为什么?

syntax jq variable-names
1个回答
2
投票

在jq 1.6及更早版本中,$变量名称中不能使用关键字。 the jq wiki 中提到了这一点,其中给出了以下关键字列表:

__loc__ and as break catch def elif else end 
foreach if import include label module
or reduce then try

任何特定版本的 jq 的关键字列表都可以从 lexer.l 文件中派生,该文件的“主”版本是 https://github.com/stedolan/jq/blob/master/src/lexer。我

——

2019年jq的开发版本中,https://github.com/jqlang/jq/commit/c72ed135e4f1b5a02a8fb3f6cd46f27513ecab2a删除了该限制 因此在 jq 1.7 中将不再存在

© www.soinside.com 2019 - 2024. All rights reserved.