You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中调用jq获取含点号的JSON键值执行失败如何解决

问题根源

你遇到的是Bash命令解析的转义和分词问题:将完整命令存入字符串变量再执行是常见错误写法,Bash不会对字符串内的引号、转义符做预期的语法解析,只会按空格拆分参数,导致jq收到的过滤表达式不符合预期,因此直接输出了表达式本身而非查询结果。

最优解决方案

优先使用jq的--arg参数将Bash变量传入jq内部,完全避免转义噩梦,对包含特殊字符(点号、引号、空格等)的键都能兼容,鲁棒性更高,完全适配你当前的运行环境:

#!/bin/bash

file="sample.json"
key="foo.bar"
# --arg 会把Bash的$key变量值传给jq内部的$k变量,单引号包裹jq表达式避免Bash解析
result=$(jq -r --arg k "$key" '.[$k]' "$file")
statusCode=$?
echo "result $result, statusCode $statusCode"

替代方案

如果你不想使用传参方式,直接在执行时写jq语句即可,不要提前把完整命令存入字符串变量:

#!/bin/bash

file="sample.json"
key="foo.bar"
result=$(jq -r ".[\"$key\"]" "$file")
statusCode=$?
echo "result $result, statusCode $statusCode"

内容的提问来源于stack exchange,提问作者Andrei Nagy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:39:02