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

如何正确向jq传递参数?实现文件名作为JSON键的问题

解决jq中变量作为JSON键的问题

你遇到的问题是因为jq不会解析字符串字面量里的变量,比如{"$fn": {}}里的"$fn"会被直接当成键名,而不是解析为变量$fn的值。下面是几种正确的写法:

方法一:使用动态键语法(推荐)

用{$变量名: 值}的格式创建带动态键的对象,再合并到原JSON结构中:

# 用$()替代反引号,语法更规范
output=$(cat "$file" | jq --arg fn "$file_name" '. += {$fn: {}}')
echo "$output" > "$file"

方法二:通过属性赋值方式

直接用.[$变量名] = 值的形式给原JSON添加动态键:

output=$(cat "$file" | jq --arg fn "$file_name" '.[$fn] = {}')
echo "$output" > "$file"

更简洁的写法(直接修改文件)

用jq的-i(--in-place)选项直接修改源文件,省去中间变量和echo步骤:

jq --arg fn "$file_name" '. += {$fn: {}}' -i "$file"

原写法错误原因

  • {"$fn": {}}里的"$fn"是字符串字面量,jq不会将其解析为变量,只会当作普通键名。
  • 使用--argjson时,单引号包裹的'{"$file_name": {}}'中的$file_name不会被shell解析,即使解析完成,传给jq的也是固定字符串键,无法实现动态变量替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:50:25