使用jq更新JSON值为0.0.x时出现无效数值字面量错误
问题解决:jq更新JSON时的语法错误
错误原因
你的jq命令存在两个核心语法问题:
- 赋值表达式缺少空格:jq的赋值语法要求
key = value(等号两侧必须有空格),而你写的是default=0.0.1,无空格的写法会导致jq无法正确识别赋值操作。 - 表达式未用引号包裹:未加引号的表达式会被shell拆分解析,导致jq收到的参数不符合语法预期。
你之前尝试加引号但未解决,大概率是引号位置错误——应该把整个jq表达式用单引号或双引号包裹,而非仅给目标值加引号。
正确命令
如果希望将DeployVersion.default设置为字符串类型:
jq '.attributes.DeployVersion.default = "0.0.1"' block.json > t.tmp && mv t.tmp block.json
如果希望设置为数字类型(无需引号):
jq '.attributes.DeployVersion.default = 0.0.1' block.json > t.tmp && mv t.tmp block.json
为什么0.1能"正常运行"?
这是个巧合,jq解析器对default=0.1这种不规范写法做了错误兼容,但这并非正确语法,遇到0.0.1这类更复杂的数值时,解析逻辑就会触发错误。
内容的提问来源于stack exchange,提问作者Alex Portnoy
相关产品推荐
相关产品推荐

